2017-05-30 165 views
2

我有一個文件夾和一些包含具有相同文件名但文件名不同的文件的子文件夾。我必須將該文件複製到共同文件夾,但我想保留的所有文件意味着我有使用文件的批處理文件腳本在Windows使用windows批處理文件將具有相同文件名的不同文件夾中的多個文件複製到一個通用文件夾

輸入文件夾

D:\Data\Logs\Day1\DataLog.txt 
D:\Data\Logs\Day2\DataLog.txt 
D:\Data\Logs\Day3\DataLog.txt 
D:\Data\Logs\Day4\DataLog.txt 
D:\Data\Logs\Day5\DataLog.txt 
D:\Data\Logs\Day6\DataLog.txt 
重命名10

輸出文件夾

D:\Data\Common\Logs\DataLog1.txt 
D:\Data\Common\Logs\DataLog2.txt 
D:\Data\Common\Logs\DataLog3.txt 
D:\Data\Common\Logs\DataLog4.txt 
D:\Data\Common\Logs\DataLog5.txt 
D:\Data\Common\Logs\DataLog6.txt 

我都試過,但其覆蓋現有文件

pushd D:\Data\Logs 
    for /r %%a in (*.*) do (
     COPY "%%a" "D:\Data\Common\Logs\%%~nxa" 
    ) 
popd 
+0

看看這個[如何複製(和增量)文件的多個實例使用批處理文件(HTTPS :/ /stackoverflow.com/questions/28697436/how-to-copy-and-increment-multiple-instances-of-a-file-using-batch-file?answertab = active#tab-top) – Hackoo

+0

但是源文件夾有多個子文件夾。 – Jayesh

回答

0

這是多一點的一般方法的,但你可以嘗試像這樣:

setlocal enabledelayedexpansion 
set "files=d:\data\logs\*.txt" 
set "destDir=d:\data\common\logs" 

for /f "delims=" %%f in ('dir "%files%" /b /s') do (
    for %%d in ("%destDir%\%%~nf*") do (
    set /a count+=1 
) 
    xcopy "%%f" "%destDir%\%%~nf!count!%%~xf*" 
    set count= 
) 

由於延遲擴展,腳本的最後一個變體無法處理其全限定路徑名稱中包含插入符(^)的文件。

當一個命令行包含在執行時展開的環境變量(如該腳本中的變量count),整個命令行似乎被解析兩次。 for循環變量(%%f及其變體)將在第一個解析期間展開,count變量在第二個解析期間展開。因爲for循環變量在第二次解析發生時已經擴展,所以for循環變量值中的任何單數格式都將被解析器吞下並從最終結果中刪除。

下面是應該照顧描述的問題腳本的修改:

setlocal enabledelayedexpansion 
set "type=.txt" 
set "source=d:\data\logs" 
set "dest=d:\data\common\logs" 

for /r "%source%" %%f in ("*%type%") do (
    for %%d in ("%dest%\%%~nf*") do (
    set /a count+=1 
) 
    set "source=%%f" 
    set "dest=%dest%\%%~nf" 
    xcopy "!source!" "!dest!!count!%type%*" 
    set count= 
) 
相關問題