2016-08-08 79 views
1

Ich habe versucht, dieses Problem für einige Tage jetzt vergebens anzugehen. Ich habe keinerlei Programmiererfahrung und diese Aufgabe hat mich verrückt gemacht.Batch kopieren Sie mehrere Dateien aus verschiedenen Ordnern mit ihren Pfaden in einer TXT-Datei aufgeführt, und benennen Sie alle Duplikate

Ich habe eine TXT-Datei, die eine Liste von Pfaden zu Dateien enthält, die kopiert werden müssen. Einige 8000 Pfade sind in dieser Datei.

Kopieren jedes Element ist nicht so eine große Sache, wie ich den Kopierbefehl und das Ziel vor/nach jedem Pfad hinzufügen kann.

Der Kern meines Problems ist, dass viele dieser Dateien den gleichen Dateinamen haben und wenn sie in verschiedenen Verzeichnissen sind, ist es kein Problem.

Allerdings brauche ich alle Dateien im selben Zielordner und es überschreibt sich selbst.

zu summieren, ich habe eine .txt-Datei, die wie folgt aussieht im Grunde:

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... 

Ich brauche Tool, das mir alle diese Dateien in einen Zielordner kopieren lassen, und sicher keine Duplikate umbenannt werden, damit sie nicht überschrieben werden.

so dass filea.file und filea.file filea.file geworden und filea1.file

EDIT: Bisher habe ich mit

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

kommen, die die Lese tut und Kopierauftrag aber nicht der Umbenennung Teil

Antwort

0

Speichern Sie das Skript unter Copy.bat, öffnen Sie Cmd Prompt aus dem Skript-Verzeichnis, und führen Sie die Fledermaus. Es funktioniert gut für mich. Post genaue Fehler, falls vorhanden.

@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

danke für die Hilfe! alles wurde ohne Probleme kopiert – monkeywithawrench