web-dev-qa-db-fra.com

CMD ne prend pas en charge les chemins UNC en tant que répertoires actuels

Nous avons des scripts batch qui semblent fonctionner correctement, mais je modifie l'un d'entre eux pour y inclure de nouveaux travaux. Lorsque je lance le script manuellement (en double-cliquant sur Windows Explorer), le message d'erreur ci-dessus s'affiche chaque fois qu'une commande pushd du script est rencontré. Ce sont des commandes pushd présentes depuis le point année et les scripts s’exécutant correctement . Existe-t-il une différence entre le script de traitement par lots qui s'exécute manuellement et celui lancé par un planificateur? Comment désactiver le message d'erreur en cours d'exécution manuellement (si cela est possible)?

4
Nelson

En double-cliquant, un fichier de commandes cmd.exe est démarré de manière implicite à l'aide de l'option /C pour fermer le processus de commande après l'exécution du fichier de commandes et avec la définition du répertoire du fichier de commandes comme répertoire actuel.

Si le fichier de commandes double-cliqué se trouve sur un partage réseau et que le chemin UNC est utilisé au lieu de mapper le partage réseau sur une lettre de lecteur et d'utiliser le lecteur réseau, cmd.exe informe l'utilisateur que le chemin UNC en tant que répertoire actuel n'est pas pris en charge et définit %SystemRoot% (Windows répertoire) en tant que répertoire courant.

L'avertissement peut être ignoré si le fichier de commandes est conçu pour être exécuté à partir d'un répertoire, ce qui signifie qu'il n'est pas nécessaire que le répertoire du fichier de commandes soit le répertoire actuel. Les fichiers de commandes bien codés, en particulier ceux exécutés par le planificateur de tâches Windows, peuvent être exécutés avec n’importe quel répertoire comme répertoire actuel.

Lors de l'exécution d'un fichier de commandes en tant que tâche planifiée, le planificateur de tâches définit %SystemRoot%\System32 (répertoire système Windows) en tant que répertoire actif avant d'exécuter la commande, sauf qu'un chemin de répertoire spécifique est défini explicitement comme démarrage dans répertoire dans les propriétés de la tâche planifiée.

Voir aussi Comment désactiver le contrôle UNC (Universal Naming Convention) pour les sessions de commande?

Veuillez noter que lorsque vous activez la prise en charge de l'exécution de fichiers de commandes avec le chemin UNC en tant que répertoire actuel, certaines applications de la console risquent de ne pas s'exécuter car elles n'ont pas été conçues pour cet environnement.

Dans votre cas, avec un fichier de commandes conçu pour être exécuté comme tâche planifiée et prenant donc en compte tous les aspects énumérés par moi dans la réponse sur Exécution des fichiers BAT dans une tâche planifiée , vous pouvez ignorer ce message d'avertissement en double-cliquant sur le fichier de traitement à l'aide de Chemin UNC.

Bien sûr, vous pouvez également créer un fichier de raccourci (* .lnk) pour que le fichier de commandes puisse démarrer le fichier de commandes via ce raccourci avec Démarrer dans dans les propriétés du fichier de raccourci défini sur %SystemRoot%\System32, comme le planificateur de tâches Windows le fait par défaut.

0
Mofi

J'ai quelques conseils: envisagez de réécrire votre script dans PowerShell. PowerShell permet au répertoire de travail actuel d’être sur un réseau. PowerShell dans son ensemble est plus polyvalent et puissant que CMD. C'est aussi multi-plateforme. Envisager de changer.

0
Arsalan Kazmi