繁体   English   中英

使用Windows批处理文件将多个文件从具有相同文件名的不同文件夹复制到一个公用文件夹

[英]Copy multiple files from different folder with same filename to one common folder using windows batch file

我有一个文件夹和一些子文件夹,其中包含一个文件名相同但值不同的文件。我必须将该文件复制到一个公用文件夹中,但我想保留所有文件,这意味着我必须使用批处理文件重命名该文件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 

输出文件夹喜欢

 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

这有点像是一般方法,但是您可以尝试执行以下操作:

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=
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM