批处理/CMD 错误"The system cannot find the file specified"



我正在尝试编写一个批处理/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

相关内容

最新更新