如何处理批处理文件中UNC路径中的空间?

问题描述

我的团队最近使用的 Windows 服务器升级了。曾经可以正常工作的批处理文件现在由于目录路径中的间距而无法工作。我认为 robocopy 命令失败了。

如何让命令正常工作并正确识别目录路径中的空间?

批处理文件代码

@ECHO OFF
:start

rem GOTO end

if exist %1*_desc.xml (
  del %1*_desc.xml
  goto final
)
:final
rem Rename files with -en-us
setlocal enabledelayedexpansion
set "Pattern=-en-us"
set "Replace="
for %%# in (%1*.*) do (
    set "File=%%~nx#"
    ren "%%#" "!_File:%Pattern%=%replace%!"
)
:end

copy %1*.* %2*.*

::robocopy "%1" "%2" *.*

正在执行的命令:

D:\scripts\Maintenance\COGCleanup.bat  "\\nycb\corp$\group\IT\IT-NY\Application Development\CognosTest\"

输出错误信息:

\\nycb\corp$\group\IT\IT-NY\Application Development\CognosTest\*.* 

Access is denied.
        0 file(s) copied.

注意:在上述错误消息中,目录的第一部分(访问被拒绝之前)带有蓝色下划线。我不能在这里复制它。 Application 之后的空格是导致问题的原因。

解决方法

如果这是您使用的命令:

D:\scripts\Maintenance\COGCleanup.bat  "\\nycb\corp$\group\IT\IT-NY\Application Development\CognosTest\"

%1"\\nycb\corp$\group\IT\IT-NY\Application Development\CognosTest\"(包括引号)。

%1*.*"\\nycb\corp$\group\IT\IT-NY\Application Development\CognosTest\"*.*

"%1"""\\nycb\corp$\group\IT\IT-NY\Application Development\CognosTest\"",将被解析为 2 个参数 \\nycb\corp$\group\IT\IT-NY\ApplicationDevelopment\CognosTest\

您可以通过使用 "%~1"(带引号)来修复。

%~1 是不带引号的 %1(如果有引号)。不管%1"foo"还是foo%~1总是foo,而"%~1"总是"foo"