2017-06-05 2 views
1

Ich versuche einfach alle Dateien und Unterverzeichnisse innerhalb d:\temp\test zu d:\temp\archive zu bewegen und so habe ich versucht, diese Befehle:Einfaches Windows-Batch in Ordner verschieben

move d:\temp\test\* d:\temp\archive\ 
move d:\temp\test\*.* d:\temp\archive\ 

aber ich habe diesen Fehler im Gegenzug:

The filename, directory name, or volume label syntax is incorrect. 

Dann grub ich auf der Bahn um und versucht, dies in einem doc bat:

for %%F in (d:\temp\test\*.*) do move /Y %%F d:\temp\archive 

und diesmal zeigt es keinen Fehler, aber alles steht still und hat keine Änderungen vorgenommen.

Was fehlt mir hier? Ich versuche dies auf Windows 10.

Antwort

1

ok, wenn Sie nur alle Dateien Verzeichnisse aus dem Inneren \test \ dann verschieben möchten, wird dies die Dateien zuerst tun, dann Verzeichnisse in einem Batch. Die for/d kopiert die Verzeichnisse und Unterverzeichnisse und Dateien.

@echo off 
move "d:\temp\test\*" "d:\temp\archive" 
for /d %%a in ("D:\temp\test\*") do move "%%~fa" "d:\temp\archive\" 

als eine Randnotiz, von cmd wenn Sie unter laufen, erhalten Sie einen Fehler.

move d:\temp\test\* d:\temp\archive 

Das ist, weil es alle Dateien, aber nicht Verzeichnisse verschiebt. Wenn Sie The filename, directory name, or volume label syntax is incorrect. bekommen, gibt es keine Dateien und nur Ordner, die Ihr Befehl move nicht sehen kann.

HINWEIS aus einer Batch-Datei, die /Y Schalter deaktiviert und Ordner werden nicht ersetzt werden, wenn vorhanden. Wenn Sie also häufig überschreiben möchten, verwenden Sie lieber xcopy und aktualisieren Sie stattdessen das Archiv. Führen Sie anschließend einen Löschvorgang in d:\temp aus, sobald die Dateien erfolgreich kopiert wurden.

Schließlich, immer schließen Sie Ihre Pfade in Doppel ". In diesem Fall wird es ohne die doppelte Anführungszeichen gut funktionieren, aber wenn Sie so etwas wie move d:\program files\temp\* d:\temp\archives haben wird es einen Fehler, da der Raum zwischen Programm und Dateien zu erstellen, so dass es immer besser ist, move "d:\program files\temp\*" "d:\temp\archive

EDIT Das Verständnis der %%~ zu verwenden Zuordnungen. In diesen Beispielen verwenden wir %%I statt %%a

%~I   : expands %I removing any surrounding quotes (") 
%~fI  : expands %I to a fully qualified path name 
%~dI  : expands %I to a drive letter only 
%~pI  : expands %I to a path only 
%~nI  : expands %I to a file name only 
%~xI  : expands %I to a file extension only 
%~sI  : expanded path contains short names only 
%~aI  : expands %I to file attributes of file 
%~tI  : expands %I to date/time of file 
%~zI  : expands %I to size of file 
%~$PATH:I : searches the directories listed in the PATH 
       environment variable and expands %I to the 
       fully qualified name of the first one found. 
       if the environment variable name is not 
       defined or the file is not found by the 
       search, then this modifier expands to the 
       empty string 

The modifiers can be combined to get compound results: 

%~dpI  : expands %I to a drive letter and path only 
%~nxI  : expands %I to a file name and extension only 
%~fsI  : expands %I to a full path name with short names only 
%~dp$PATH:I : searches the directories listed in the PATH 
       environment variable for %I and expands to the 
       drive letter and path of the first one found. 
%~ftzaI  : expands %I to a DIR like output line` 
+0

Dank! würdest du bitte auch erklären was "%% ~ fa" bedeutet? Ich weiß nur, dass "%% a" jeden Ordner innerhalb von "d: \ temp \ test \" darstellt. – ioojimooi

+1

Sicher. %% ~ fa würde sich auf den vollständig qualifizierten Pfad beziehen. Denken Sie daran, dass wir %% a zu 'D: \ temp \ test \ *' zuweisen, wobei '*' der vollständige Pfad wäre, also wäre '%% ~ fa 'der vollständige Pfad. Wenn Sie also 'D: \ temp \ test \ ordner1'' D: \ temp \ test \ ordner2' haben, wäre jeder '%% ~ fa', um zu sehen, wie es funktioniert, erstellen Sie einen Stapel und fügen Sie diesen ein. es wird nur den vollen Weg zurückgeben. '@echo aus für/d %% a in (" D: \ temp \ test \ * ") echo %% ~ fa' –

+1

@ioojimooi Dies würde das gleiche tun, aber nicht den gesamten Pfad echo, nur die Ziel selbst 'für/d %% a in (" D: \ temp \ test \ * ") echo %% ~ na' –

Verwandte Themen