2

a、b、cなどの異なるフォルダーがあり、各フォルダーにはx、y、zなどの異なるファイルがあります。ファイルx、y、zは各フォルダーにあります。単一のコマンドを使用して、異なるフォルダーから各ファイルをコピーする方法はありますか? 結果をすべてのフォルダーからxファイルにして、1つのフォルダーに入れたいです。

例: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 に答える