XCopy 到带有提示符和通配符的路径

XCopy to path with a prompt and wildcard

我想重新调整批处理文件的用途,最新的限制是目标位置的目录具有唯一标识符和描述。我需要提示输入唯一标识符并使​​用通配符绕过描述。例如“\serverB\dest\ID - descriptions\DIR1\DIR2\

set DEST="\serverB\Dest"
set /p UNIQUE ID=Enter ID
echo %UNIQUE_ID%
>NULL xcopy "\serverA\source\something\file.txt" "%DEST%\%UNIQUE_ID% *\DIR1\DIR2" /i /y

以前我没有遇到过这个问题,所以长目录名不是问题。现在我需要绕过结束组件,因为目录在描述中不一致。一旦我通过具有唯一 ID\Desc 的目录,其余子目录将保持一致。

set DEST="\serverB\Dest"
set /p UNIQUE ID=Enter ID
echo %UNIQUE_ID%
>NULL xcopy "\serverA\source\something\file.txt" "%DEST%\%UNIQUE_ID% *\DIR1\DIR2"

我得到无效的驱动器规格作为错误。

我也不从事 IT 工作或以编码为生,所以请温和地回答任何问题。

您不能在目录名称中使用文件 Glob,除非您只想匹配目录名称,这在 windows 个可执行文件中相当一致。

相反,您可以使用 FOR 循环来匹配目录名称,使用文件 Glob 作为目录名称,然后将其保存到变量中并在您的 XCOPY 命令中使用它。

@(
  ECHO OFF
  SETLOCAL
  SET "_Src_FilePath=\serverA\source\something\file.txt"
  SET "_DstPath_Prefix=\serverB\Dest"
  SET "_DstPath_Postfix=\DIR1\DIR2"
)

SET /P "_UNIQUE_ID=Enter ID: "
IF NOT DEFINED _UNIQUE_ID (
   ECHO. Exiting, you did not provide a Unique ID!
   GOTO :EOF
)
ECHO.ID Provided: "%_UNIQUE_ID%"

REM Get matching Director(y|ies) and copy file(s):

FOR /F "Tokens=*" %%D IN ('
  DIR /AD /B "%_DstPath_Prefix%\%_UNIQUE_ID% *"
') DO (
  ECHO.Matched Directory: "%%D" - Running Copy to: "%_DstPath_Prefix%\%%D%_DstPath_Postfix%"
  >NULL xcopy "%_Src_FilePath%" "%_DstPath_Prefix%\%%D%_DstPath_Postfix%"
)

您不能在路径中间使用 wildcards,它们只能在最后一个路径元素中使用。

要解决这个问题,您可以使用 for /D loop 来解析通配符:

set "DEST=\serverB\Dest"
:LOOP
set /P UNIQUE_ID="Enter ID: " || goto :LOOP
echo %UNIQUE_ID%
for /D %%D in ("%DEST%\%UNIQUE_ID% *") do (
    > nul xcopy "\serverA\source\something\file.txt" "%%~D\DIR1\DIR2"
)

还更改了一些其他内容:

  • 已应用引用的 set 语法,因此引号不再成为赋值的一部分(见第一行);
  • 拼写错误已修复,提示的变量名为 UNIQUE_ID 而不是 UNIQUE ID;
  • 演示了如何使用 conditional execution;
  • 检测用户是否在 Enter ID 提示中输入了某些内容
  • Windows 中的空设备被称为 nul 而不是 null