【发布时间】:2021-03-22 23:02:36
【问题描述】:
我正在尝试编写一个批处理/cmd 文件,该文件将在找到“-”即 SpaceDashSpace 时重命名目录。我认为通过 Echo 输出内容而不是实际重命名它们,我拥有了我需要的一切。接下来我在几个目录上进行了测试,效果很好。
当我尝试将其移动到网络文件夹/子文件夹时,我发现我需要 PushD 命令。如果我在特定目录中运行它,一切都很好。
路径信息类似于:
\\MyNetworkStorage\TopLevelFolder\Music
接着是:
Artist1
Artist1 - Album1
Artist1 - Album2
Artist1 - Album3
Artist2
Artist2 - Album1
Artist2 - Album2
你明白了。
如果我在其中一个中启动批处理文件:
- \MyNetworkStorate\TopLevelFolder\Music\Artist1 或
- \MyNetworkStorate\TopLevelFolder\MusicArtist2
一切都很好。如果我尝试从上一级开始,那就是:
- \MyNetworkStorate\TopLevelFolder\Music
每个目录都出现以下错误。:
“系统找不到指定的文件”
谷歌搜索告诉我路径可能很长,我已按照说明进行
- 本地计算机策略 > 计算机配置 > 管理 模板 > 系统 > 文件系统
- 双击启用 Win32 Long 路径选项并启用它
另一个建议是在本地机器上运行我的 .cmd 文件时,在它前面加上: cmd.exe /c MyCmdFile.cmd
我搜索过的东西都没有解决我的问题。
我是批处理文件的新手,所以问题可能实际上是我在过去 1.5 天拼凑起来的内容。在这一点上,我希望我为它编写了一个 C# 程序。我以为这很简单。有什么建议吗?
再次,如果我在任何特定艺术家的目录中启动它,它将重命名所有子目录,删除“艺术家姓名 - ”部分,只留下我想要的专辑名称。当我向上移动到包含所有艺术家的目录时,它失败了。我正在更改以命令文件的“PUSHD”开头的行。
@Echo Off
setlocal EnableDelayedExpansion
PUSHD \\MyNetwork\Music\HighRez <<<---This fails
PUSHD \\MyNetwork\Music\HighRez\Any Artist I pick <<<---This works for all sub directories
:: If this fails then exit
If %errorlevel% NEQ 0 goto:eof
:: other commands...
FOR /D /r %%G in ("* - *") DO (
SET DirName=%%~nxG
set "NewName=!DirName:* - =!"
Echo Renaming from "!DirName!" To "!NewName!"
REM ***Remove REM from line below to actually rename once you are happy with results
ren "!DirName!" "!NewName!"
)
popd
【问题讨论】:
-
默认路径限制已经很长了;根据您的描述,我怀疑您是否击中它。听起来您的 HighRez 文件夹存在权限问题,不允许您进入,但子文件夹权限配置正确。
-
我同意路径长度的事情似乎不太可能,因为一些艺术家/专辑名称很长。而且由于它在我尝试特定艺术家的长曲时有效,所以效果很好。再加上它对所有人都失败了,当我从更高级别开始时,从来没有一次失败。
-
您应该使用
%%G而不是!DirName!进行重命名命令。 -
@Squashman 我得到了同样的错误。但是,我现在看到了我认为 PUSHD 添加的映射驱动器和部分路径。带有 !DirName! 的原创!
Renaming from "Nirvana - Unplugged (24-48)" To "Unplugged (24-48)" The system cannot find the file specified.从 Z:\HighRez\Nirvana\Nirvana 重命名 - Unplugged (24-48) 到“Unplugged (24-48)” 命令的语法不正确。 with %%G:Renaming from Z:\HighRez\Nirvana\Nirvana - Unplugged (24-48) To "Unplugged (24-48)"命令的语法不正确。 -
您问题中的代码在重命名命令中显示引号,但您的评论中的输出示例未显示引号。无论是否需要引号,您都应该始终将它们用作最佳实践。您必须使用
%%G,因为这是目录名称的完整路径。变量DirName只是目录名,在当前工作目录中不存在。所以重命名命令必须是ren "%%G" "!NewName!"我认为无论你使用什么编程语言,你都应该知道当前的工作目录是什么。
标签: batch-file cmd directory-structure