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
;
我想重新调整批处理文件的用途,最新的限制是目标位置的目录具有唯一标识符和描述。我需要提示输入唯一标识符并使用通配符绕过描述。例如“\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; 检测用户是否在
- Windows 中的空设备被称为
nul
而不是null
;
Enter ID
提示中输入了某些内容