Xcopy目录模式匹配
Xcopy directory pattern matching
我需要使用 bat 文件将源文件复制到目标文件夹。
我创建了这个:
@echo off
set source="D:\Folder1\file.dll"
set destination="D:\Test\TestCopy*\Test\"
xcopy /s /y %source% %destination%
pause
我的目标路径是TestCopy.2.5.3.6
。这个数字可以改变。所以指定 TestCopy*
是行不通的。指定 TestCopy.*.*.*.*
也不起作用。
我该如何解决这个问题?
那不是 xcopy
的用法;它不能将目录 structures/files 复制到多个文件夹,例如将文件 random.ext
复制到 C:\folder1\test
、C:\folder2\test
等
另外,不需要使用xcopy
来复制文件。只需使用 copy
即可。
为此,请使用:
@echo off
pushd "D:\Test"
set source="D:\Folder1\file.dll"
for /F "delims= eol=" %%A IN ('dir /B /AD "D:\Test\TestCopy*"') do (
copy %source% "%%~fA\Test\"
)
popd
或者,更好的一行 for /F
:
@echo off
pushd "D:\Test"
set source="D:\Folder1\file.dll"
for /F "delims= eol=" %%A IN ('dir /B /AD "D:\Test\TestCopy*"') do copy %source% "%%~fA\Test\"
popd
这是针对您有多个 TestCopy*
子文件夹的情况:
::It's better to comment out @echo off when you are testing the batch file
::@echo off
::Moved the open quote's position, so the source variable won't have quotes inside.
set "source=D:\Folder1\file.dll"
for /F "delims=" %%i IN ('dir /ad /b "D:\Test\TestCopy*"') do call :fcopy "%%i"
::Comment or remove pause when it's okay.
pause
goto :eof
:fcopy
if not exist "D:\Test\%1\Test\" goto :eof
xcopy "%source%" "D:\Test\%1\Test\"
使用子程序 :fcopy
,将每个 TestCopy*
子文件夹名称传递给它。
所有 ::
起始行都是注释行。他们没有被执行。
我认为在使用时引用每个路径变量是一个好习惯,但不要将引号本身包含在变量中——这就是我将引号移到 set source
行的原因。
我需要使用 bat 文件将源文件复制到目标文件夹。
我创建了这个:
@echo off
set source="D:\Folder1\file.dll"
set destination="D:\Test\TestCopy*\Test\"
xcopy /s /y %source% %destination%
pause
我的目标路径是TestCopy.2.5.3.6
。这个数字可以改变。所以指定 TestCopy*
是行不通的。指定 TestCopy.*.*.*.*
也不起作用。
我该如何解决这个问题?
那不是 xcopy
的用法;它不能将目录 structures/files 复制到多个文件夹,例如将文件 random.ext
复制到 C:\folder1\test
、C:\folder2\test
等
另外,不需要使用xcopy
来复制文件。只需使用 copy
即可。
为此,请使用:
@echo off
pushd "D:\Test"
set source="D:\Folder1\file.dll"
for /F "delims= eol=" %%A IN ('dir /B /AD "D:\Test\TestCopy*"') do (
copy %source% "%%~fA\Test\"
)
popd
或者,更好的一行 for /F
:
@echo off
pushd "D:\Test"
set source="D:\Folder1\file.dll"
for /F "delims= eol=" %%A IN ('dir /B /AD "D:\Test\TestCopy*"') do copy %source% "%%~fA\Test\"
popd
这是针对您有多个 TestCopy*
子文件夹的情况:
::It's better to comment out @echo off when you are testing the batch file
::@echo off
::Moved the open quote's position, so the source variable won't have quotes inside.
set "source=D:\Folder1\file.dll"
for /F "delims=" %%i IN ('dir /ad /b "D:\Test\TestCopy*"') do call :fcopy "%%i"
::Comment or remove pause when it's okay.
pause
goto :eof
:fcopy
if not exist "D:\Test\%1\Test\" goto :eof
xcopy "%source%" "D:\Test\%1\Test\"
使用子程序 :fcopy
,将每个 TestCopy*
子文件夹名称传递给它。
所有 ::
起始行都是注释行。他们没有被执行。
我认为在使用时引用每个路径变量是一个好习惯,但不要将引号本身包含在变量中——这就是我将引号移到 set source
行的原因。