2016-05-20 17 views
0

So, hier ist mein CodeWMIC und FOR-Schleifen

wmic product get name > "programs.txt" 
FOR /f %%a IN (programs.txt) DO (
    pause 
    echo %%a 
    set /p variable= Delete %%a? 
    pause 
    IF "%variable%" == "yes" (
     wmic product where name="%%a" call uninstall 
     cls 
    ) ELSE (
    cls 
    ) 
) 

Ich versuche, ein Programm zu machen, wo es die installierten Programme angezeigt werden und fragen, ob sie sie deinstallieren möchten. Der Code läuft bis zur for-Schleife, wird dann aber beendet. Ich habe es mit @echo probiert und es gibt nur den Code aus, aber es läuft nicht. jede Hilfe wäre toll

[EDIT] Nur um ein bisschen mehr zu erklären, wenn ich den Code laufen alles läuft gut bis die for-Schleife und dann wird es versaut. Es wird nicht einmal die Pause laufen, nachdem die for-Schleife gerade endet.

+0

Welche Art von Anführungszeichen ist das um '%% a'? Verwenden Sie Standard-Anführungszeichen (wie in der vorherigen Zeile). Außerdem müssen Sie [verzögerte Erweiterung] (http://stackoverflow.com/a/30284028/2152082) für Ihre 'variable' – Stephan

+0

normale Anführungszeichen verwenden und ich habe gerade verzögerte Erweiterung ohne Erfolg hinzugefügt. – MathMXC

Antwort

1

Das Problem besteht darin, wie Sie Ihre Textdatei erstellen. WMIC-Ausgabe ist Unicode. Wenn die For-Schleife versucht, sie zu lesen, wird sie als ANSI-Datei (Standard) geöffnet. Dies führt zu einem ungeraden Verhalten.

Statt die Ausgabe von Umleiten /output es wie folgt aus:

wmic /output:"uniprogs.txt" product get name 

Dann Sie es von Unicode in ANSI/ASCII mit dem Befehl TYPE so konvertieren:

TYPE uniprogs.txt > ansiprogs.txt 

Jetzt laufen Ihre for-Schleife auf ansiprogs.txt und alles sollte gut sein.

+0

Es funktioniert, aber es gibt eine kleines Problem. Nehmen wir an, ich habe Google Chrome installiert und wenn ich dieses %% laufe, entspricht ein Google und nicht Google Chrome. Es stoppt nach dem Leerzeichen. Weißt du, warum? [EDIT] Ich habe ansiprogs.txt überprüft und es hat alle – MathMXC

+1

@MathMXC, weil Leerzeichen ein Standardtrennzeichen in 'for' ist und" Token = 1 "ist der Standardwert. Also wird ohne weitere Anweisungen nur das erste Wort verwendet. . Verwende 'for/f" delims = "%% a ...' – Stephan