2016-10-04 112 views
0

我有兩個文件夾CopyFromCopyTo其中CopyFrom具有命名爲1.txt ... 100.txt 100個的文本文件,並在CopyTo文件夾我有100個拷貝一次一個文件夾文件夾爲F1 ... F100。現在,我想將CopyFrom文件夾中的一個文件複製到CopyTo中的一個文件夾中,以便F1將包含1.txt,F2將包含2.txt,...,F100將包含100.txt文件。複製一個文件,在那裏有100個文件和100個文件夾使用批處理文件

我知道複製我可以使用類似For /d %%a in (C:\Users\me\Desktop\ShortCuts\*) do xcopy "C:\Users\me\Desktop\Time.xls" "%%a"所有文件夾,但我無法找到一種方法,不同的文件複製到不同的文件夾。

我可以重複所有文件(For %%a in (C:\Users\me\Desktop\ShortCuts\*) Echo "%%a")CopyFrom文件夾中,也可以回聲CopyTo文件夾中的所有文件夾,但不能想出用兩種工作得到我所期待的。

+0

你還沒有明確表態,如果目標文件夾被命名爲相同的源文件,或者如果你只是想每個單獨的源文件放置到指定目的地文件夾不同的是未知的。 – Compo

+0

「CopyTo」位置中的所有文件夾「F1」,「F2」等是否已經存在?如果不是,他們是否必須創建? – aschipfl

+0

@Compo,我們對此深感抱歉,'CopyTo'文件夾中有100個文件夾(例如F1,F2,... F100),並作爲源文件被複制這些文件夾的名稱是不一樣的。當我說,**可以不同**,我的意思是,目標文件夾名稱或源文件名稱可以不同,如我在示例中提到的。 – Viki2016

回答

0

假設源位置包含的文件1.txt100.txt和目標位置已經包含了所有F1F100目錄,下面的代碼片段可能會爲你工作:

@echo off 
setlocal EnableExtensions DisableDelayedExpansion 

rem // Define constants here: 
set "Pattern=*.txt" 
set "CopyFrom=." 
set "CopyTo=D:\Target" 

for %%F in ("%CopyFrom%\%Pattern%") do (
    ECHO copy "%%~F" "%CopyTo%\F%%~nF\" 
) 

endlocal 
exit /B 

有沒有枚舉完成的目標位置,複製目標只是從源文件名派生而來。

在測試腳本後,刪除大寫ECHO命令以實際複製文件!

+0

這將是巨大的,如果你能解釋一下這個請'複製「%%〜F」「%CopyTo用於%\˚F%%〜nF的\」' – Viki2016

+0

這會將每個源文件('%%〜F')複製到以'%CopyTo%'爲根,並命名爲'F'的文件夾,後跟當前文件的基本名稱(如果文件爲'27.txt', '%%〜nF'等於'27';輸入'for /?'進入命令提示符窗口並查看幫助文本的底部);最後的反斜槓確保目標它是一個文件夾,但不是一個文件... – aschipfl

+0

感謝您的詳細解釋.. – Viki2016

2
@echo off 
    setlocal enableextensions disabledelayedexpansion 

    rem Configure paths 
    set "copyFrom=c:\somewhere" 
    set "copyTo=c:\anotherPlace" 

    rem Generate two lists, one with files and one with folders 
    dir /b /a-d "%copyFrom%\*" > "%temp%\copyFromFiles.txt" 
    dir /b /ad "%copyTo%\*" > "%temp%\copyToFolders.txt" 

    rem Assign each list as input to two streams and start processing  
    9< "%temp%\copyFromFiles.txt" 8< "%temp%\copyToFolders.txt" (
     call :matchFromWithTo 
    ) 

    rem Remove generated lists 
    del "%temp%\copyFromFiles.txt" 
    del "%temp%\copyToFolders.txt" 

    rem End 
    goto :eof 

:matchFromWithTo 
    rem Read file from stream 9 and leave if nothing read 
    <&9 set /p "file=" || goto :eof 
    rem Read folder from stream 8 and leave if nothing read 
    <&8 set /p "folder=" || goto :eof 

    rem Do the copy (debug: we will only echo the command) 
    echo copy "%copyFrom%\%file%" "%copyTo%\%folder%" 

    rem Keep reading until all files or folders are processed 
    goto :matchFromWithTo 
+0

好主意是F100'!爲了獲得排序的輸出(也在非NTFS捲上),在'dir'命令行中添加'/ on'怎麼辦? – aschipfl

+0

@aschipfl,謝謝。 *「......可以不同......」*使我放棄了該選項。沒有文件/文件夾名稱之間的明確關係,我決定只是在文件系統默認順序中迭代。 –

+0

感謝您的回答,我必須說你一個真的是一個詳細.. – Viki2016

相關問題