Obtenez de produit nom de WMIC pour une variable dans le lot

J'ai eu du mal à trouver une sortie spécifique à l'aide de WMIC dans les lots en vue de construire automatiquement un script de désinstallation. La question que je suis en cours d'exécution à travers, c'est que le programme de désinstallation de l'application que je suis en train de supprimer est créé en vertu d'une auto-généré SSID sur chaque système (par ex.: C:\ProgramData{07BFF8FA-C12F-46C7-8239-8EE83E21B5DA}\program-name\Uninstall.exe). De ce fait, je ne peut pas construire une statique désinstaller localisation basée sur le registre comme le programme de désinstallation de la chaîne est également sous le même SSID dans le registre.

J'ai essayé un couple de différentes manières de tirer les désinstaller info et le seul que j'ai atterri sur " c'est arrivé près, c'est à l'aide de WMIC:

wmic product where "Name like '%product name%'" get name

sorties:

Name
<product-name>

^ et un retour chariot supplémentaire, et que le retour chariot est le problème. Il définit la variable, puis efface.

Voici la boucle que je suis en train d'utiliser pour obtenir que cela fonctionne:

@echo off
for /f "skip=1 delims==" %%a in (
     'wmic product where "Name like '%product-name%' get name'
) do set PROD=%%a
echo %PROD%

sorties:

C:\Users\Administrator>ECHO is off.

ce qui signifie que le %de PROD% variable n'est pas définie.

Si je lance le batch avec @echo, j'obtiens ceci:

:\Users\Administrator>echo <product-name>
<product-name>
:\Users\Administrator>echo
ECHO is on.

Notez la sortie est absent de la lettre de lecteur. C'est exactement ce que je vois, donc c'est bizarre, et aussi le paramètre est défini, echo avait alors unset.

J'ai aussi essayé de le faire via un fichier texte de relais:

wmic /OUTPUT:%~dp0\wmic.txt product where "Name like '%product-name%'" get name
for /f %%a in (
     "%~dp0\wmic.txt" | findstr /v "product-name"
) do set PROD=%%a

Toute aide/conseils seraient les bienvenus!


Mise à JOUR!

suivant le lien fourni par npocmaka, je suis venu avec cette:

for /f "skip=1 delims=" %a in ('wmic product where "Name like '%product-name%'" get name') do @for /f "delims=" %b in ("%a") do @echo %b

qui génère correctement le nom du produit

Cependant, quand je le lance à partir de lots:

for /f "skip=1 delims=" %%a in (
    'wmic product where "Name like '%product-name%'" get name'
) do @for /f "delims=" %%b in ("%%a") do echo %%b

Je reçois à la place:

No Instance(s) Available.

Qui pour moi sonne comme une question WMIC est d'avoir avec la syntaxe ou quelque chose


RÉSOLU!

De crédit à npocmaka pour suggérant une nested loop, et indiv pour souligner la échapper à la logique de la WMIC variable

Corriger la syntaxe de la commande utilisée dans le lot:

for /f "skip=1 delims=" %%a in (
     'wmic product where "Name like '%%product-name%%'" get name'
) do @for /f "delims=" %%b in ("%%a") do @echo %%b

Merci une tonne de gars!

No Instance(s) Available. signifie qu'aucun objet l'application de ces critères a été trouvé.
Est la variable %product-name% défini ?
Je sais, mais c'est essentiellement la même commande, sauf formaté pour le lot au lieu de le lancer à partir d'une invite de cmd directement, donc je suis à une perte quant à pourquoi il sera de sortie à partir de CMD, mais pas de lot
C'est un espace réservé de nom, et dans le contexte de la commande WMIC, les caractères "%" agir comme des caractères génériques. Quand je lance cette commande à l'aide d'une invite de cmd directement, il affiche le nom du produit que je veux, cependant, quand je le lance à partir de lots (assurez-vous d'utiliser %%a la place de %) de la sortie de la commande WMIC est "Non Instance(s) Disponible."
La même logique que %a -> %%a s'applique pour le produit-nom. Faire %%product-name%%

OriginalL'auteur pyr0ball | 2015-06-11