Ich habe dieses Batch-Skript, mit dem ich Ordner und deren Inhalt aus einer Textdatei kopieren kann. Kann mir jemand helfen, es so anzupassen, dass es die Ordner und den Inhalt verschiebt/ausschneidet und nicht nur kopiert?
set file_list=ready.txt
set dest_folder=c:\small\final
for /f "delims=" %%a in (%file_list%) do (
xcopy /Y "%%a*" "%dest_folder%%%~pa"
)
Antwort1
Bitte beachten Sie: Sie können keine Platzhalter verwenden move
.
(und machen Sie zur Verdeutlichung bitte file_list
-> dir_list
.)
@echo off
Setlocal EnableDelayedExpansion
set dir_list=ready.txt
set dest_folder=c:\small\final\ok
mkdir %dest_folder%
for /f "delims=" %%a IN (%dir_list%) do (
set dir=%%a
if "!dir:~-1!"=="\" set dir=!dir:~0,-1!
move "!dir!" "%dest_folder%\"
)
Bei Verzeichnissen in ready.txt
mit am Ende wird \
das vor dem entfernt .\
move
Bearbeiten:
Da Sie die Verzeichnisse von einem Laufwerk auf ein anderes verschieben,kippenverwenden move
. Hier ist eine Lösung mit robocopy
:
@echo off
Setlocal EnableDelayedExpansion
set dir_list=ready.txt
set dest_folder=d:\small\final\ok\
if "%dest_folder:~-1%"=="\" set dest_folder=%dest_folder:~0,-1%
for /f "delims=" %%a in (%dir_list%) do (
set dir1=%%a
if "!dir1:~-1!"=="\" set dir1=!dir1:~0,-1!
for %%f in (!dir1!) do set dir2=%%~nxf
robocopy "!dir1!" "%dest_folder%\!dir2!" /MOVE /E
)
Bitte beachten Sie, robocopy
dass nur ganze Verzeichnisse und keine einzelnen Dateien kopiert und verschoben werden können. Ihr ready.txt
Verzeichnis sollte also nur aus Verzeichnissen bestehen. Nachlaufende Dateien \
werden berücksichtigt und können gemischt werden.
Robocopy
benötigt den vollständigen Verzeichnisnamen für das neue Verzeichnis, deshalb brauchen wir die
for %%f
-Zeile (um den letzten Verzeichnisteil des Quellverzeichnisses zu erhalten.) Es braucht also
robocopy c:\sub\meme d:\sub\meme
. Das geht nicht robocopy c:\sub\meme d:\sub
.
Sie können diese Batchdatei testen, indem Sie sie echo
vor die robocopy
-Datei setzen
(und vor das move
im vorherigen Beispiel).