Batch/CMD 错误 "The system cannot find the file specified"
Batch/CMD Error "The system cannot find the file specified"
我正在尝试编写一个 batch/cmd 文件,它会在找到“-”即 SpaceDashSpace 时重命名目录。我以为我通过 Echo 输出东西而不是实际重命名它们就拥有了我需要的一切。接下来我在几个目录上对其进行了测试,它运行良好。
当我试图将它移动到网络 folder/sub 文件夹时,我发现我需要 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
这就是最终为可能需要类似东西的任何人工作的东西。它是使用 %%G 及其周围引号的组合,如:
ren "%%G" "!NewName!"
代替原来的变量“!DirName!”
工作示例,终于 ;-)
@Echo Off
setlocal EnableDelayedExpansion
PUSHD \NASBoxOnNetwork\Music\HighRez
:: 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
我正在尝试编写一个 batch/cmd 文件,它会在找到“-”即 SpaceDashSpace 时重命名目录。我以为我通过 Echo 输出东西而不是实际重命名它们就拥有了我需要的一切。接下来我在几个目录上对其进行了测试,它运行良好。
当我试图将它移动到网络 folder/sub 文件夹时,我发现我需要 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
这就是最终为可能需要类似东西的任何人工作的东西。它是使用 %%G 及其周围引号的组合,如:
ren "%%G" "!NewName!"
代替原来的变量“!DirName!”
工作示例,终于 ;-)
@Echo Off
setlocal EnableDelayedExpansion
PUSHD \NASBoxOnNetwork\Music\HighRez
:: 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