Je travaille régulièrement de manière interactive avec un script batch que je ne peux pas facilement modifier. Ce script sert notamment d'aide à la navigation - il comprend les conventions de présentation du code de mon entreprise/produit et utilise cette connaissance pour transformer "theScript cdTestCode" en "cd /D C:\The\Inferred\Path\To\The\Unit\Tests "pour le composant dans le répertoire duquel je me trouve. C'est un excellent moyen de gagner du temps.
J'aimerais pouvoir utiliser ce script à partir d'un environnement PowerShell interactif. Pour la plupart des fonctionnalités, l'appel du script à partir de PowerShell fonctionne parfaitement. Mais pour cette fonction de navigation, le changement de répertoire qu'elle effectue n'affecte que l'environnement cmd dans lequel PowerShell exécute le script par lots. Le répertoire de l'hôte PowerShell environnant n'est pas modifié, ce qui signifie que ce n'est pas très utile pour moi lorsque j'essaie d'utiliser PowerShell comme mon script.
Ma question est donc la suivante : En supposant que je ne puisse pas modifier le script du lot. (et que je ne veux pas le réécrire en tant que script PowerShell), existe-t-il un bon moyen de propager le répertoire de travail final du batch script vers l'hôte PowerShell à la fin du batch script ? En d'autres termes, existe-t-il un moyen raisonnablement simple d'écrire une fonction :
function InvokeBatchScriptAndAssumeDirectory($BatchScriptFullName) {
# ...
}
tel que
PS> pwd
Path
----
C:\elsewhere
PS> echo .\mybatchscript.cmd
@ECHO OFF
cd /D C:\
PS> InvokeBatchScriptAndAssumeDirectory .\mybatchscript.cmd
PS> pwd
Path
----
C:\
Cette question est très similaire, mais la "solution" qu'il présente consiste simplement à transformer le fichier batch en un script .ps1. Le fichier batch script avec lequel je travaille est très complexe - faire cela nécessiterait une réécriture importante, ce que je préfère éviter.