gpt4 book ai didi

windows - 使用Windows批处理文件将具有相同文件名的不同文件夹中的多个文件复制到一个公共(public)文件夹中

转载 作者:可可西里 更新时间:2023-11-01 10:42:35 26 4
gpt4 key购买 nike

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

关于windows - 使用Windows批处理文件将具有相同文件名的不同文件夹中的多个文件复制到一个公共(public)文件夹中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44259990/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com