Wie behandeln Sie eine schließende Klammer im Pfad-Namen in einer for-Schleife?

Habe ich einen langen Pfadnamen zu einem Programm, das ich ausführen muss, die in einer for /f-Schleife, die eine schließende Klammer ")", und von denen brauche ich zum Parsen der Ausgabe:

for /f "tokens=1" %%G in ('"C:\Documents and Settings\myaccount\Desktop\Test_release (x86)\program.exe" list') do (echo Will do something with %%G)

...wo 'Liste' ist ein parameter übergeben zu meinem Programm. Ich bekomme den Fehler "'C:\Documents' nicht erkannt wird als Befehl interne oder externe, betriebsbereiten Programm oder batch-Datei".

Ich weiß das problem ist, dass die schließende Klammer in der Tat schließt die "für" - block, so wird das Ende doppelte Anführungszeichen nicht "gesehen", so der lange Pfad-Namen nicht eingeschlossen in doppelten Anführungszeichen mehr. Was ich nicht verstehe, ist warum ist dies passiert, denn mein Weg ist eingeschlossen in doppelten Anführungszeichen? Ich habe auch versucht die option usebackq:

for /f "usebackq tokens=1" %%G in (`"C:\Documents and Settings\myaccount\Desktop\Test_release (x86)\program.exe" list`) do (echo Will do something with %%G)

...ohne bessere Ergebnisse. Ich versuchte zu entkommen, wie dieses "^)" oder so "^^)", nichts zu tun. Versucht Verdoppelung der Anführungszeichen:

for /f "tokens=1" %%G in ('""C:\Documents and Settings\myaccount\Desktop\Test_release (x86)\program.exe"" list') do (echo Will do something with %%G)

Funktioniert immer noch nicht.

Ich bin darüber hinaus in der Tat über eine variable enthält den Pfad, die nicht im Voraus wissen (gebaut von %CD%), und EnableDelayedExpansion aktiviert ist. Ich habe versucht, die verzögerte Erweiterung (die zwar behoben, die ähnliche Probleme in anderen Situationen) um zu verhindern, dass die variable expansion zu Lesen, die Zeit und die Verzögerung bei der Ausführung:

setlocal EnableDelayedExpansion
set _var=%CD%\program.exe
@REM _var now contains C:\Documents and Settings\myaccount\Desktop\Test_release (x86)\program.exe
for /f "tokens=1" %%G in ('"!_var!" list') do (echo %%G)
endlocal

Immer noch nicht funktioniert, verstehe nicht warum.

Aber, Verdoppelung der Anführungszeichen mit einer verzögerten expansion im obigen code:

for /f "tokens=1" %%G in ('""!_var!"" list') do (echo %%G)

funktioniert!... warum... warum tun Sie dieses??? Welchen Effekt hat es? Ich verstehe es nicht. Außerdem befürchte ich, dass es möglicherweise ein problem in einigen bestimmten Umständen.

Irgendeine Idee?

  • Entschuldigen Sie mich. Sie schrieb, Sie versucht zu entkommen, die Klammern. Sind Sie sicher, dass Sie es so?: for /f "tokens=1" %%G in ('"C:\Documents and Settings\myaccount\Desktop\Test_release ^(x86^)\program.exe" list') do (echo Will do something with %%G)
  • Ja, ich habe es wie schon erwähnt direkt unter meinem 2. Beispiel, ohne Erfolg.
InformationsquelleAutor philz | 2011-11-18
Schreibe einen Kommentar