
Ich habe eine Batchdatei erstellt, die über das Rechtsklickmenü in Win7 ausgeführt werden soll. Wenn ich mit der rechten Maustaste auf einen Ordner klicke, möchte ich, dass die Batchdatei alle Dateien (außer Ordnern) ein Verzeichnis nach oben verschiebt. Bisher habe ich Folgendes:
PUSHHD %1
MOVE "%1\*.*" ..\
Dies scheint zu funktionieren, solange der Ordner, aus dem ich Dateien verschiebe, keine Leerzeichen enthält. Wenn der Ordner Leerzeichen enthält, erhalte ich eine Fehlermeldung:"Die Syntax des Befehls ist falsch."
Daher funktioniert mein Stapelverarbeitungsvorgang bei einem Ordner mit dem Titel, PULLTEST
jedoch nicht bei einem Ordner mit dem Titel PULL TEST
.
Noch einmal, ich brauche es nicht, um Ordner zu verschieben, nur Dateien. Und ich möchte, dass es in jedem Verzeichnis auf jedem Laufwerk funktioniert. Es wird keine bestimmten Verzeichnisse geben, in denen ich arbeiten werde. Es wird zufällig sein.
Unten finden Sie die von mir erstellte Registrierungsdatei, falls Sie sie als Referenz benötigen.
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\shell\PullFiles]
@="PullFilesUP"
[HKEY_CLASSES_ROOT\Directory\shell\PullFiles\command]
@="\"C:\\Program Files\\MyBatchs\\PullFiles.bat\" \"%1\""
Antwort1
Der Stapel könnte so einfach sein wie dieser eine Zeilensatz:
@move "%~1\*" "%~1\.."
Die Tilde entfernt alle einschließenden Anführungszeichen, die möglicherweise bereits im Argumentwert vorhanden sind. Die zusätzlichen Anführungszeichen waren die Ursache Ihres Problems.
BEARBEITEN- Sie geben nicht an, was geschehen soll, wenn eine Datei mit demselben Namen bereits im übergeordneten Verzeichnis vorhanden ist. Da sich der MOVE-Befehl in einer Batchdatei befindet, wird die Datei im übergeordneten Ordner standardmäßig automatisch überschrieben. Wenn das Skript Anweisungen einholen soll, sodass Sie die Möglichkeit haben, das Überschreiben zu verhindern, benötigen Sie diese /-Y
Option.
@move /-y "%~1\*" "%~1\.."
Antwort2
Sie haben pushd
„Befehl“ falsch geschrieben, Sie haben zwei h
.
Und Sie müssen es %1
aus move
dem Befehl entfernen. Wenn das Verzeichnis Leerzeichen enthält, move
wird der Befehl unterbrochen.
Angenommen, Ihr Batch heißt MoveFiles.bat
. Er wird folgendermaßen aufgerufen:
MoveFiles.bat "C:\Test\With Spaces"
Nach der Parameterersetzung innerhalb des Batches sieht es folgendermaßen aus:
PUSHD "C:\Test\With Spaces"
MOVE ""C:\Test\With Spaces"*.*" ..\
Der zweite Befehl weist aufgrund verschachtelter Anführungszeichen einen Syntaxfehler auf.
Diese Batch-Version funktioniert bei mir:
PUSHD %1
MOVE *.* ..\
Antwort3
Der Grund für diesen Fehler sind die Leerzeichen. pushd
funktioniert mit Leerzeichen, aber move
nicht. Versuchen Sie, Ihr zweites Argument, ..\
, in Anführungszeichen zu setzen:
PUSHD %1
MOVE "%1*.*" "..\"