2

我有不同的文件夹,例如:a、b、c 等,每个文件夹都有不同的文件,例如:x、y、z 等。文件 x、y、z 位于每个文件夹中。有没有办法使用单个命令从不同文件夹复制每个文件?我希望结果是所有文件夹中的 x 文件都在一个文件夹中。

例如:xcopy/S x*.* C:\Folder

它可以从不同的文件夹中复制所有的 x 文件。如何使用单个命令从不同文件夹复制 x、y、z?谢谢

4

2 回答 2

3

您必须在批处理文件中或直接从 cmd 中使用“for”。

for %I in (file1.txt file2.txt file3.txt) do xcopy\s %I c:\somedir\

您可以为不同文件夹中的不同文件提供绝对/相对路径,而不是文件名

于 2012-09-10T04:53:49.160 回答
0

没有办法在 DOS 中使用单个命令来执行此操作。你需要的是一个像下面这样的脚本。这可以在您尝试从中收集的树的根文件夹中执行,如下所示:

batch.bat x*.*

它将递归地收集当前目录和所有子目录中与 x*.* 匹配的所有文件。它们将以这种格式保存:

folder1\x1.txt - > folder1x1.txt
folder2\x5.txt - > folder2x5.txt
folder3\x1.txt - > folder3x1.txt

这是代码:

@echo off
FOR /F "delims=" %%I IN ('DIR .\%1 /B /AA /S') DO (CALL :COPYFILE %%I)
GOTO END

:COPYFILE
set "ofn=%~1"
set "fn=%~1"
call:MakeRelative fn
set fn=%fn:\=%
set fn=%fn::=%
copy %ofn% %fn%
goto:eof

:MakeRelative file base -- makes a file name relative to a base path
::                      -- file [in,out] - variable with file name to be converted, or file name itself for result in stdout
::                      -- base [in,opt] - base path, leave blank for current directory
:$created 20060101 :$changed 20080219 :$categories Path
:$source http://www.dostips.com
SETLOCAL ENABLEDELAYEDEXPANSION
set src=%~1
if defined %1 set src=!%~1!
set bas=%~2
if not defined bas set bas=%cd%
for /f "tokens=*" %%a in ("%src%") do set src=%%~fa
for /f "tokens=*" %%a in ("%bas%") do set bas=%%~fa
set mat=&rem variable to store matching part of the name
set upp=&rem variable to reference a parent
for /f "tokens=*" %%a in ('echo.%bas:\=^&echo.%') do (
    set sub=!sub!%%a\
    call set tmp=%%src:!sub!=%%
    if "!tmp!" NEQ "!src!" (set mat=!sub!)ELSE (set upp=!upp!..\)
)
set src=%upp%!src:%mat%=!
( ENDLOCAL & REM RETURN VALUES
    IF defined %1 (SET %~1=%src%) ELSE ECHO.%src%
)
EXIT /b

:END

希望这可以帮助!

于 2012-09-12T23:51:53.467 回答