Batch file 为什么我的批处理脚本在文件夹名有空格时输出错误的语法错误消息?

Batch file 为什么我的批处理脚本在文件夹名有空格时输出错误的语法错误消息?,batch-file,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" xc

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

命令的语法不正确

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

@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
)
单线解决方案:

@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
    )
)
多行解决方案:

@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
    )
)
重要信息:此处是目标文件夹路径末尾的反斜杠,因为这清楚地表明目标指定的是目录而不是文件名。否则,如果target指定目录或文件并等待用户输入,则此处用于复制单个文件的XCOPY将提示用户。有关详细信息,请参阅

出于测试目的,在不抑制任何标准或错误输出的情况下,使用附加调试信息:

@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/?
  • 获取/?
  • 如果/?
  • xcopy/?

另请阅读有关Microsoft的文章。

使用
{}
按钮将格式化所选代码。如果我所做的编辑不是您实际拥有的,请使用帖子下方的
edit
功能进行更正。语法错误是,如果我按照我相信您发布的那样格式化代码,
if not exist
的目标必须与
if
关键字在同一物理行上。如果
xcopy
也在一个单独的行上,那么它也必须与
If
在同一物理行上,除非您可以拥有
If不存在。。。(
在一行上,下一行是
xcopy
,下一行是
以匹配额外的
以下)。如果我将if不存在的目标放在同一物理行上,则需要传输,路径中的数据字是关键字(这是文件夹名称的一部分).它们是浅蓝色的。我已经做了你做的更改,但仍然给出相同的错误。