【问题标题】:Batch/CMD Error "The system cannot find the file specified"批处理/CMD 错误“系统找不到指定的文件”
【发布时间】: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


【解决方案1】:

这最终适用于任何可能需要类似东西的人。它是使用 %%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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 2017-12-07
    • 2016-09-19
    • 2012-03-02
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多