2017-05-30 62 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= 
) 
相关问题