我正在尝试编写一个批处理/cmd文件,当它找到"-"即SpaceDashSpace。我以为我已经通过Echo输出了我需要的一切,而不是真正重命名它们。接下来,我在几个目录上测试了它,它运行得很好。
当我试图将其移动到网络文件夹/子文件夹时,我发现我需要PushD命令。同样,如果我在一个特定的目录中运行它,一切都会好起来。
路径信息看起来像:
\MyNetworkStorageTopLevelFolderMusic
紧随其后的是:
Artist1
Artist1 - Album1
Artist1 - Album2
Artist1 - Album3
Artist2
Artist2 - Album1
Artist2 - Album2
你明白了。
如果我在以下任意一个中启动批处理文件:
- \MyNetworkStorate\TopLevelFolder\Music\Artist1或
- \MyNetworkStorate\TopLevelFolder\MusicArtist2
一切都很好。如果我试着从一个层次上去做,那就是:
- \MyNetworkStorate\TopLevelFolder\Music
对于每个目录,我都会收到以下错误
"系统找不到指定的文件";
谷歌搜索告诉路径可能很长,我已经按照的指示
- 本地计算机策略>计算机配置>管理的模板>系统>文件系统
- 双击Enable Win32 Longpath选项并启用它
另一个建议是在本地计算机上运行.cmd文件时,在其前面加上:cmd.exe/cMyCmdFile.cmd
我找不到任何东西能解决我的问题。
我是批处理文件的新手,所以问题可能实际上在于我在过去1.5天里拼凑的东西。在这一点上,我希望我为它写一个C#程序。我认为这会很简单。有什么建议吗?
再次,如果我在任何特定艺术家的目录中启动它,它将重命名所有子目录;艺术家名称-";部分,并保留我想要的专辑名称。当我向上移动到包含所有艺术家的目录时,它失败了。我正在更改以";PUSHD";命令文件的。
@Echo Off
setlocal EnableDelayedExpansion
PUSHD \MyNetworkMusicHighRez <<<---This fails
PUSHD \MyNetworkMusicHighRezAny 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
这对任何可能需要类似功能的人来说都是有效的。这是使用%%G及其周围的引号的组合,如:
ren "%%G" "!NewName!"
代替原来的变量"!DirName">
最后是工作示例;-(
@Echo Off
setlocal EnableDelayedExpansion
PUSHD \NASBoxOnNetworkMusicHighRez
:: 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 "%%G" To !NewName!
REM ***Remove REM from line below to actually rename once you are happy with results
ren "%%G" "!NewName!"
)
popd