Xcopy目录模式匹配

问题描述 投票:0回答:2

我需要使用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.*.*.*.*也不起作用。

我怎么解决这个问题?

batch-file pattern-matching xcopy
2个回答
4
投票

这不是使用xcopy的方式:它无法将目录结构/文件复制到某些子文件夹中存在的文件夹,例如:将文件random.ext复制到C:\folder1\testC:\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

3
投票

这适用于有多个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行中移动引号的原因。

© www.soinside.com 2019 - 2024. All rights reserved.