6
votes

Traduire le fichier batch DOS à PowerShell

J'essaie de traduire un fichier .bat à PowerShell et de faire du mal à comprendre ce que font quelques extraits de code: xxx pré>

Qu'est-ce que la ligne 2 ci-dessus fait? Spécialement, je ne comprends pas ce que: \ = / fait depuis que j'ai vu la variable d'autre où dans le code référencé comme! My_variable!. P>

L'autre point de confusion est le code ci-dessous. P>

set TN0=%~n0  
set TDP0=%~dp0  
set STAR=%*


0 commentaires

3 Réponses :


1
votes

Points d'exclamation (!) Les fichiers de lots i N DOS Référencez la valeur intermédiaire, utile si vous êtes dans une boucle. Si vous deviez utiliser un% à la place (dans une boucle), il retournerait la même valeur.

Les lignes 3 et 4 sont réglées "Certaines_variable" à la valeur intermédiaire de "certains_arguments: \ \" et certains_arguments : "= \", respectivement. Encore une fois, je suppose que ces lignes proviennent d'une boucle. P>

comme pour les assignations variables, les affectations variables PowerShell fonctionnent comme ceci: P>

    $myVariable = "my string"


1 commentaires

Merci, cela a parcouru un long chemin à m'aider à traduire ce fichier de commandes à PowerShell



4
votes

Le ! var: recherche = remplacer! est la substitution de chaîne pour une variable expansée de retard.

http://www.robvanderwoude.com/ntset.php#strsubst < / p>

Lorsque vous utilisez ! au lieu de % pour une variable, vous voulez que DOS fasse le remplacement variable au moment de l'exécution (ce qui est probablement ce que vous pensez qu'il fait avec < Code>% , mais ça ne le fait pas). Avec % , la variable est substituée au point que la commande est analysée (avant son exécution) - donc si la variable change dans le cadre de la commande, elle ne sera pas vue. Je pense que certains commutatez-vous à utiliser ! tout le temps, car il donne un comportement "normal".

Vous pouvez en savoir plus sur l'expansion retardée ici

http://www.robvanderwoude.com/ntset.php#delayedexpansion < / p>


0 commentaires

3
votes

Les deux premiers Set variablename = Les commandes utilisent des modificateurs pour développer le nom du fichier de commandes, représenté comme % 0 . .

% ~ N0 l'étend à un nom de fichier et
% ~ DP0 Délimètre pour inclure une lettre de lecteur et une cheminée.

La finale, % * , représente tous les arguments passés au fichier de commandes.

Les informations supplémentaires peuvent être trouvées dans les réponses ici ou Ici .


0 commentaires