当文件夹名称包含空格时,为什么我的批处理脚本会输出错误的语法错

时间:2017-11-14 16:11:44

标签: batch-file

运行此脚本时,会输出以下错误消息:

  

命令的语法不正确

文件夹位于服务器上,文件夹名称包含空格。

@echo off

for  %%I in ("\\path31vm\file transfers\Data Files\Inbound\VMs\su\Reg\new\*.csv") do (
if not exist 
"\\path31vm\file transfers\Data Files\Inbound\VMs\su\Reg\new\CSV\%%~nI.csv.completed" 
xcopy "\\path31vm\file transfers\Data Files\Inbound\VMs\su\Reg\new\%%~nxI" "\\path31vm\file transfers\Data Files\Inbound\VMs\su\Reg\new\CSV"/D
)

1 个答案:

答案 0 :(得分:0)

单线解决方案:

@for %%I in ("\\path31vm\file transfers\Data Files\Inbound\VMs\su\Reg\new\*.csv") do @if not exist "%%~dpICSV\%%~nxI.completed" %SystemRoot%\System32\xcopy.exe "%%I" "%%~dpICSV\" /C /D /Q /Y >nul 2>&1

多线解决方案:

@echo off
for %%I in ("\\path31vm\file transfers\Data Files\Inbound\VMs\su\Reg\new\*.csv") do (
    if not exist "%%~dpICSV\%%~nxI.completed" (
        %SystemRoot%\System32\xcopy.exe "%%I" "%%~dpICSV\" /C /D /Q /Y >nul 2>&1
    )
)

这里重要的是目标文件夹路径末尾的反斜杠,因为这是 XCOPY 的明确指示,即目标指定目录而不是文件名。否则,此处用于复制单个文件的 XCOPY 会在目标指定目录或文件并等待用户输入时提示用户。有关详细信息,请参阅batch file asks for file or folder

出于测试目的,提供额外的调试信息,并且不会抑制任何标准或错误输出:

@echo off
for %%I in ("\\path31vm\file transfers\Data Files\Inbound\VMs\su\Reg\new\*.csv") do (
    echo CSV file is:  %%I
    if not exist "%%~dpICSV\%%~nxI.completed" (
        echo Not existing: %%~dpICSV\%%~nxI.completed
        %SystemRoot%\System32\xcopy.exe "%%I" "%%~dpICSV\" /C /D /Y
    ) else (
        echo Existing is:  %%~dpICSV\%%~nxI.completed
    )
)
pause

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • echo /?
  • for /?
  • if /?
  • xcopy /?

另请阅读Microsoft有关Using Command Redirection Operators

的文章