2016-05-20 1 views
0

Voici donc mon codeWMIC et pour les boucles

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 
    ) 
) 

Je suis en train de faire un programme dans lequel il affiche les programmes installés et demandez s'ils veulent les désinstaller. Le code fonctionne bien jusqu'à la boucle for mais il se ferme juste. Je l'ai essayé avec @echo on et il sort juste le code mais ne l'exécute pas. Toute aide serait bonne

[EDIT] Juste pour expliquer un peu plus quand j'exécute le code, tout va bien jusqu'à la boucle for, puis il est foiré. Il ne lancera même pas la pause après la fin de la boucle for.

+0

Quel genre de guillemets est-ce autour de '%% a'? Utilisez des guillemets standards (comme sur la ligne précédente). En outre, vous devez utiliser [expansion retardée] (http://stackoverflow.com/a/30284028/2152082) pour vos guillemets normaux 'variable' – Stephan

+0

et je viens d'ajouter l'expansion retardée en vain – MathMXC

Répondre

1

Le problème est lié à la façon dont vous créez votre fichier texte. La sortie WMIC est Unicode. Lorsque la boucle For essaie de le lire, elle l'ouvre en tant que fichier ANSI (par défaut). Cela entraîne un comportement étrange.

Au lieu de rediriger votre sortie, /output comme ceci:

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

Ensuite, vous devez convertir Unicode en ANSI/ASCII avec la commande TYPE comme ceci:

TYPE uniprogs.txt > ansiprogs.txt 

Exécutez maintenant votre boucle for sur ansiprogs.txt et tout devrait être bon.

+0

Cela fonctionne mais il y a un petit problème. Disons que j'ai installé Google Chrome et quand je cours ce %% a est égal Google pas Google Chrome. Il s'arrête après l'espace. Est-ce que tu sais pourquoi? [EDIT] J'ai vérifié ansiprogs.txt et il a tous les – MathMXC

+1

@MathMXC parce que l'espace est un délimiteur standard dans 'for' et" tokens = 1 "est la valeur par défaut Donc, sans autres instructions, seul le premier mot est utilisé. . Utilisez 'pour/f" delims = "%% a ...' – Stephan