2012-09-10 83 views
2

我有不同的文件夾,例如:a,b,c等,每個文件夾有不同的文件,例如:x,y,z等。 文件x,y,z位於每個文件夾中。有沒有辦法使用單個命令從不同文件夾複製每個文件?我希望結果是來自所有文件夾的x文件在一個文件夾中。使用DOS複製多個文件

如:XCOPY/S X * * C:\文件夾

可以從不同的文件夾複製所有的X文件。如何使用單個命令從不同文件夾複製x,y,z?謝謝

+0

嗯......你如何期望把多個文件同名到一個目標文件夾中?這根本無法完成。如果您希望文件共存於一個文件夾中,則文件必須重新命名或合併。 – dbenham

回答

1

您必須在批處理文件中或直接從cmd中使用'for'。

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

不是文件名,你可以給不同的文件的絕對/相對路徑不同的文件夾

+0

或者,如果使用DOS for循環:'for %% i in(file1.txt file2.txt file3.txt)do(xcopy/s %% i .. \ somedir)' – Underverse

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 

希望這有助於!

相關問題