2 votes

Comment ouvrir image.png en utilisant ps1 script ?

Réglage de la valeur ci-dessous $usbDriveLetter pour trouver automatiquement la lettre du lecteur USB, et l'utilisation de cette variable pour ouvrir une image sur l'USB ne fonctionne pas. L'image s'imprime littéralement " G:\image.png "dans le cmd.

$usbDriveLetter = (gwmi win32_volume -f 'label=''USB_NAME_HERE''').Name;
"$usbDriveLetter" + "image.png"

Mais si je n'utilise pas de var et que je rends "G:\" statique dans le script de PowerShell, l'image s'ouvre très bien.

G:\image.png

Qu'est-ce qui ne va pas ? Comment ouvrir dynamiquement des images à l'aide de ps1 scripts ?

1voto

Frode F. Points 12953

En combinant deux cordes, on obtient une corde. Si vous citez le chemin ( "G:\image.png" ), il se comportera de la même manière.

Utilice Invoke-Item pour exécuter le chemin :

$usbDriveLetter = (gwmi win32_volume -f 'label=''USB_NAME_HERE''').Name
Invoke-Item -Path ("$usbDriveLetter" + "image.png")

Vous pouvez également utiliser l'opérateur d'appel & :

$usbDriveLetter = (gwmi win32_volume -f 'label=''USB_NAME_HERE''').Name
& ("$usbDriveLetter" + "image.png")

1voto

mklement0 Points 12597

Réponse utile de Frode F. fournit des solutions efficaces.

En ce qui concerne les quand vous avez besoin & , la fonction opérateur d'appel :

Pour exécuter une commande / ouvrir un document qui est no spécifié en tant que chaîne littérale non citée Vous avez besoin de & .

C'est-à-dire, & est nécessaire chaque fois que vous spécifiez le nom de la commande (ou le chemin d'accès) / le nom du fichier du document (ou le chemin d'accès) :

  • soit : en tant que chaîne de caractères citée (par exemple, "G:\image.png" )

  • ou : comme le résultat d'une expression (par exemple, ("$usbDriveLetter" + "image.png") ; idem pour $(...) )

Nota:

  • Dans le cas de l'ouverture d'un document (plutôt que d'invoquer un exécutable), vous pouvez utiliser la fonction Invoke-Item au lieu de & .

  • Si vous essayez de ouvrir un chemin du dossier dans l'explorateur de fichiers, seulement Invoke-Item œuvre.


En ce qui concerne les pourquoi vous avez besoin & :

PowerShell a deux les modes d'analyse fondamentaux :

  • argument mode qui fonctionne comme un coquilles

  • expression mode qui fonctionne comme un les langages de programmation .

La course à pied Get-help about_Parsing présente une introduction à ces modes.

En bref, c'est le premier jeton qui détermine le mode appliqué y afin de exécuter / ouvrir quelque chose, il doit être analysé en argument mode (en expression le résultat est simplement sortie ) ; ainsi, le premier jeton doit être :

  • soit : un nom de commande/document littéral, sans guillemets, ou un chemin d'accès, comme indiqué.
  • ou : & Dans ce cas, l'argument suivant - qui peut être spécifié comme une chaîne de caractères ou une expression entre guillemets - est interprété comme la commande / le nom du document ou le chemin d'accès à exécuter / ouvrir.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X