我几天来一直在尝试解决这个问题,但没有成功。我没有任何编程经验,这个任务让我发疯。
我有一个 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\"
它执行读取和复制工作,但不执行重命名部分
将下面的脚本保存到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
这看起来对我有用,但还有 1 个进一步的调整/问题
我只有一个源文件夹,我想要其中的所有文件(数百个)和所有子文件夹,只需复制并移动到 1 个目标文件夹,并且如果文件在源中具有重复的名称(按照上面的方式重命名)
非常感谢。