批量复制不同文件夹中的多个文件,并将其路径列在txt文件中,并重命名任何重复项

问题描述 投票:0回答:2

我几天来一直在尝试解决这个问题,但没有成功。我没有任何编程经验,这个任务让我发疯。

我有一个 txt 文件,其中包含需要复制的文件的路径列表。该文件中有大约 8000 个路径。

复制每个项目并不是什么大问题,因为我只需在每个路径之前/之后添加复制命令和目标即可。

我的问题的症结在于,许多文件具有相同的文件名,当它们位于不同的目录中时,这不是问题。

但是我需要将所有文件放在同一个目标文件夹中,并且它会不断覆盖自身。

总而言之,我有一个 .txt 文件,基本上如下所示:

D:\Big folder\Folder\Subfolder a\filea.file    
D:\Big folder\Folder3\Subfolder za\filek.file    
D:\Big folder\Folder\Subfolder ds\filed.file   
D:\Big folder8\Folder\Subfolder p\filea.file...

我需要一些工具,可以让我将所有这些文件复制到一个目标文件夹中,并确保所有重复项都被重命名,以免它们被覆盖。

使得 filea.file 和 filea.file 成为 filea.file 和 filea1.file

编辑:到目前为止我已经想出了

FOR /F "tokens=* usebackq" %i IN (`type "C:\Users\username\Desktop\completelist.txt"`) DO COPY "%i" "E:\destination\"

它执行读取和复制工作,但不执行重命名部分

batch-file cmd copy batch-rename
2个回答
0
投票

将下面的脚本保存到Copy.bat,从脚本目录中打开Cmd Prompt,然后运行bat。这对我来说很有效。发布确切的错误(如果有)。

@echo off
setlocal enabledelayedexpansion
set file=%userprofile%\Desktop\completelist.txt
set "dest=E:\destination" & set "i=" & pushd !dest!
for /f "usebackq tokens=*" %%G in ("%file%") do (
    call :rename %%~nG %%~xG %%G
    copy "%%G" "%dest%\!target!" >nul )
popd
exit /b

:rename
set "target=%1!i!%2"
:loop
set /a i+=1
if exist "!target!" set "target=%1!i!%2" & goto :loop
set "i=" & echo Copied %3 to !target!
exit /b

0
投票

这看起来对我有用,但还有 1 个进一步的调整/问题

  • 如果我没有文件列表怎么办?

我只有一个源文件夹,我想要其中的所有文件(数百个)和所有子文件夹,只需复制并移动到 1 个目标文件夹,并且如果文件在源中具有重复的名称(按照上面的方式重命名)

非常感谢。

© www.soinside.com 2019 - 2024. All rights reserved.