Leerzeichen in Dateinamen mit forfiles und 7zip
Schreibe ich ein Skript, um den Reißverschluss alte Dateien, mit forfiles für die looping-und 7za, die für das komprimieren. Ich habe Schwierigkeiten mit Umgang mit Leerzeichen in den Dateinamen, und zwar habe ich eine Lösung gefunden, die zu funktionieren scheint, nicht verstehen, warum hat mir nervös über die Bereitstellung von it in die Produktion.
Hier ist der Befehl, der zu funktionieren scheint:
forfiles -p%rootLogDir% -s -m*.log -d-14 -c"cmd /c 7za a -tzip """@PATH\@FILE-%date%.zip""" """@PATH\@FILE""""
Beachten Sie, dass der Pfad-und Dateiname Argumente zu 7za 3 (ja DREI) sets von Anführungszeichen um Sie herum. Ein Satz zitiert, macht nichts, zwei Sätze von Anführungszeichen führte in das Skript hinzufügen, wird jede Datei in das Verzeichnis, in das Archiv eher als die, die angegeben ist, und drei scheint zu funktionieren.
Kann mir jemand erklären, warum es so viele sind erforderlich? Ich hätte gedacht, dass nach einem Satz, der rest sind überflüssig, aber anscheinend bin ich falsch.
Du musst angemeldet sein, um einen Kommentar abzugeben.
(
forfiles
ist ein cmd.exe Unterbefehl? Wenn dem so ist, sollten Sie re-taggen Sie Ihre Frage mit einem der vielen (MS)windows-tags zur Verfügung. )Zitieren kann ein zum Verrücktwerden sein Erlebnis, auch für Menschen mit viel Erfahrung in shell-und bat-Skripts.
@BugFinder die msg geeignet ist, und ich möchte hinzufügen, dass 3 dbl-quotes ist ein Weg, um "quote" einen einzelnen double-quote char.
Dem Sie arbeiten 'mit' der Befehl-Prozessor (cmd.exe?). Geben Sie einen Befehl (mit 1 oder mehr Wörter oder Operatoren), d.h.
und drücken Sie dann die enter-Taste. Der Kommando-Prozessor nicht nur start-ausführen den Befehl, den Sie vorgelegt haben, scannt er die Linie, auf der Suche nach besonderen Fall Wörter und Symbole, wie Variablen Namen. In Unix-shells Umgebungsvariablen Aussehen
$varName
oder${varName}
. In .bat-Dateien%var%
oder%%v%%
. Die variable umgewandelt werden soll in einen Wert.Dass ist nur ein pass, der Kommando-Prozessor macht, es gibt andere. Aber für Ihre Bedürfnisse, die cmd-Prozessor ist die scan-für-Wort-Sätze, als ein Wort. Wenn Sie eine
var="one two"
, nicht rund um die Wert-Seite mit Zitaten verwechselt wird jeder Befehl, der das hat, um es zu verarbeiten. es wird Aussehen, wievar=one .... two
(separates word -, rechts?).Also, wenn aus irgendeinem Grund Sie brauchen, um pass-thru-ein double-quote char auf einer niedrigeren Ebene der Verarbeitung, die Sie Folgen müssen, die Kommando-Prozessor Regeln, nennen die Dinge, wie Sie brauchen und dann funktioniert alles ok.
Nur als "Wort" ist eine zitierte Wort
"""
ist ein börsennotiertes doppelte Anführungszeichen ein. Nach der Kommando-Prozessor macht es für die normale Verarbeitung von Zitaten, die mitten in doppelten Anführungszeichen wird trotzdem noch in der Kommando-Prozessor das 'view', was auf der Kommandozeile (nach Variablen wurden erweitert, und alle anderen Reihenfolge der Verarbeitung, die Regeln befolgt wurden.)Uff!
Also um es einpacken, Sie schrieb in einem Kommentar
Nein,
"""
=>"
Weil mit
"""
ist eine Möglichkeit, die Kommando-Prozessor hinterlassen einen stand-alone-Doppel-Zitat der char bleibt auf der Kommandozeile und nicht sprengen.Keine magischen Kräfte, beachten Sie, dass Ihr Befehl hat später
"""
s. Jeder Satz wird verlassen 1"
char für die spätere Verarbeitung.Als @BugFinder Punkte aus,
\"
ausreichend sein, aber ich bin mir nicht sicher, welche Befehlsprozessor oder shell Sie verwenden, so kann ich nicht testen.Schließlich Pro eine ausgezeichnete Erinnerung geschrieben von Belisar,
Mir erlauben, Sie willkommen zu StackOverflow und erinnern drei Dinge, die wir tun in der Regel hier: 1) Wie Sie die Hilfe erhalten, versuchen Sie, geben Sie es zu, die Beantwortung von Fragen in Ihrem Fachbereich 2) Lesen Sie die FAQs, http://tinyurl.com/2vycnvr , 3), Wenn Sie sehen, gute Q&A, Stimmen Sie durch die Verwendung der grauen Dreiecke, http://i.stack.imgur.com/kygEP.png , als die Glaubwürdigkeit des Systems basiert auf dem Ruf, den Nutzer zu gewinnen, indem Sie Ihr wissen teilen. Denken Sie auch daran, die Antwort akzeptieren, die besser löst Ihr problem, wenn überhaupt, durch drücken der Häkchen-Zeichen , http://i.stack.imgur.com/uqJeW.png
Ich hoffe, das hilft.
Auf eine schnelle denke, wie eine Reihe von Dingen """ = ", z.B. 2 Zitate Runde ein Zitat.. ein \" vielleicht auch ausreichend.
Alle Dateinamen und Pfade die Leerzeichen enthalten, müssen in Anführungszeichen eingeschlossen werden.
Nächsten, in Bezug auf Ihre Frage, wie Sie über Angabe des Pfades wie: