Wie kombinieren Sie Platzhalter und Leerzeichen (Anführungszeichen) in einem Windows-Befehl?

5214
Jan Fabry

Ich möchte Verzeichnisse mit folgendem Format entfernen:

C:\Program Files\FogBugz\Plugins\cache\PluginName@example.com_NN 

NNist eine Zahl, daher möchte ich einen Platzhalter verwenden (dies ist Teil eines Postbuild-Schritts in Visual Studio). Das Problem ist, dass ich Anführungszeichen um den Pfadnamen (für das Leerzeichen in Program Files) mit einem Platzhalterzeichen kombinieren muss, um das Ende des Pfads zu finden. Ich habe bereits herausgefunden, dass rdes sich hierbei um den Befehl zum Entfernen handelt, der Platzhalterzeichen akzeptiert, aber wo muss ich die Anführungszeichen setzen? Ich habe keine Endung Zitat versucht (funktioniert für dir) ...example.com*", ...example.com"*, ...example.com_??", ...cache\"PluginName@example.com*, ...cache"\PluginName@example.com*, aber keiner von ihnen arbeiten.

(Wie viele Befehle zum Entfernen einer Datei / eines Verzeichnisses gibt es sowieso in Windows? Und warum unterscheiden sie sich alle in ihren Fähigkeiten?)

2
Ich verwende dazu meistens 'rm -rf'. Es gibt mehrere Ports von Unix-Coreutils für Windows: [UnxUtils] (http://sourceforge.net/projects/unxutils/), [das MSYS-Paket von MinGW] (http://www.mingw.org/wiki/MSYS) , Cygwin (yecch), Micros ~ 1 own [Dienste für Unix] (http://de.wikipedia.org/wiki/Services_for_unix) ... grawity vor 14 Jahren 0

2 Antworten auf die Frage

3
grawity

rmdir does not support wildcards. It only accepts complete filenames.

You can try this alternative:

for /d %f in ("C:\Program Files\FogBugz\Plugins\cache\PluginName@example.com_*") do rmdir /s/q "%~f" 

(The /s/q arguments to rmdir do the same thing as rm -rf on Unix. The for /d argument makes for match directory names instead of file names.)


Remember that the cmd.exe shell does not do wildcard expansion (unlike Unix sh) -- this is handled by the command itself.

Ihre Alternative funktioniert in "cmd.exe", jedoch nicht als VS-Nachbearbeitungsschritt ("Der Befehl wurde mit Code 255 beendet"). Und tatsächlich dachte ich aus den (widersprüchlichen) Informationen im Web, dass `rd 'Platzhalter unterstützt und` rmdir` dies nicht. Aber es scheint, dass sie Synonyme sind? Und tatsächlich erwartete ich eine Erweiterung durch die Shell, nicht die einzelnen Befehle. Jan Fabry vor 14 Jahren 0
@ Jan: Das könnte daran liegen, dass `for` eine eingebaute` cmd.exe` ist. Sie könnten es in ein `.cmd`-Skript schreiben und es stattdessen ausführen. (Achtung: "for" in Batch-Skripten erfordert "%% x" anstelle von "% x".) Und ja, "rd" und "rmdir" sind dasselbe. grawity vor 14 Jahren 1
0
Darth Android

You can escape the space with the ^ character: C:\Program^ Files\FogBugz\Plugins\cache\PluginName@example.com_*

Das scheint nicht zu funktionieren (obwohl es sollte: http://msdn.microsoft.com/en-us/library/kcc7tke7(VS.80).aspx). Ich verwende den folgenden Code: `rmdir / s / q C: \ Programm ^ Dateien \ FogBugz \ Plugins \ cache \ $ (TargetName) *` in VS oder in `cmd.exe` (natürlich mit` TargetName`), und ich bekomme `Das System kann die angegebene Datei nicht finden. / Das System kann den angegebenen Pfad an beiden Stellen nicht finden. Jan Fabry vor 14 Jahren 0