【问题标题】:Batch script: The syntax of the command is incorrect - when script is going trough subdirectories?批处理脚本:命令的语法不正确 - 脚本何时通过子目录?
【发布时间】:2013-07-11 04:45:11
【问题描述】:

大家好,

我的问题可能很简单。

当我尝试使用 /r 作为批处理脚本的参考来遍历所有文件夹和子目录以执行这个小脚本时,我收到“命令的语法不正确”错误。

    @echo off
setlocal enabledelayedexpansion enableextensions
for /r %%f in ("*[]*.*") do (
    set oldname=%%f
    set newname=!oldname:[]=!
    echo !oldname!
    echo !newname!
    pause
    ren !oldname! !newname!
)

但是,当我删除 /r 时,这实际上可以正常工作,没有任何问题:

    @echo off
setlocal enabledelayedexpansion enableextensions
for %%f in ("*[]*.*") do (
    set oldname=%%f
    set newname=!oldname:[]=!
    echo !oldname!
    echo !newname!
    pause
    ren !oldname! !newname!
)

那么,我怎样才能让这个脚本顺利通过所有文件夹和子目录呢?

谢谢

【问题讨论】:

    标签: syntax batch-file scripting cmd command-prompt


    【解决方案1】:

    您的问题源于这样一个事实,即当您使用 /r 时,您将获得完整路径,而当您不使用 /r 时,您只会获得文件名。试试这个:

    @echo off
    setlocal enabledelayedexpansion enableextensions
    for /r %%f in ("*[]*.*") do (
        set oldname=%%f
        set newname=!oldname:[]=!
        call :NewFileNameOnly "!newname!"
        echo !oldname!
        echo !newname!
        pause
        ren "!oldname!" "!newname!"
    )
    goto :eof
    
    :NewFileNameOnly
    set newname=%~nx1
    goto :eof
    

    【讨论】:

    • 使用 dbenham 的解决方案。它更简单......没有子程序。
    【解决方案2】:

    使用 REN 时,您不能在新文件名中包含路径信息。您只能在指定原始文件名(和位置)时包含路径信息。任何尝试在第二个参数中使用带有路径信息的 REN 都会导致语法错误。

    您可以使用%%~nxf 来获取文件的名称和扩展名。然后在该值上进行搜索和替换以得出新名称。

    @echo off
    setlocal enabledelayedexpansion
    for /r %%F in ("*[]*.*") do (
      set "newname=%%~nxF"
      set "newname=!newname:[]=!"
      echo %%F
      echo !newname!
      pause
      ren "%%F" "!newname!"
    )
    

    如果您在原始文件名(或路径)中遇到!,上述操作将失败。这可以通过在循环中打开和关闭延迟扩展来解决。

    @echo off
    setlocal disableDelayedExpansion
    for /r %%F in ("*[]*.*") do (
      set "oldname=%%F"
      set "newname=%%~nxF"
      setlocal enableDelayedExpansion
      set "newname=!newname:[]=!"
      echo !oldname!
      echo !newname!
      pause
      ren "!oldname!" "!newname!"
      endlocal
    )
    

    【讨论】:

      猜你喜欢
      • 2018-06-19
      • 2013-07-27
      • 1970-01-01
      • 2015-12-15
      • 2013-03-12
      • 1970-01-01
      • 2015-10-11
      • 2015-04-12
      • 2023-01-19
      相关资源
      最近更新 更多