La méthode de renommage n'a pas fonctionné pour moi (testé sur Windows XP SP3). J'ai commencé une application arbitraire et j'ai essayé de la renommer. Il n'y avait aucune erreur, aucun effet.
Cependant, cette méthode ne fonctionne:
COPY /B app.exe+NUL app.exe
Lorsque l'application est en cours d'exécution, cette commande me produit un message d'erreur. Et lorsque l'application n'était pas activée, non seulement cette commande préservait le contenu du fichier, mais elle laissait également l'horodatage de modification inchangé.
Si je vous, donc, je ne serais probablement utiliser cette commande (au début du script de traitement par lots, comme vous l'avez dit) ainsi:
COPY /B app.exe+NUL app.exe >NUL || (GOTO :EOF)
L'opérateur ||
passe le contrôle à la commande/block à côté si la commande précédente a échoué (a augmenté la valeur errorlevel). Par conséquent, la commande ci-dessus terminerait le script si la copie a échoué (ce qui serait le cas si le fichier était ouvert). Le message d'erreur sera conservé (car ces messages sont généralement envoyés au périphérique d'erreur standard et ne sont pas ignorés avec la redirection >NUL
, alors que d'autres, les messages non-erreur sont généralement envoyés à la sortie standard et peuvent donc être supprimé avec >NUL
) et servir d'explication de la fin prématurée du script. Toutefois, si vous souhaitez afficher votre propre message à la place, vous pouvez essayer quelque chose comme ceci:
COPY /B app.exe+NUL app.exe >NUL 2>NUL || (ECHO Target file inaccessible& GOTO :EOF)
Alors que >NUL
cache tout ce qui est envoyé à la sortie standard, 2>NUL
fait la même chose pour l'erreur type.
Merci @Andriy. Oui, ça fonctionne. Cela peut prendre un peu de temps cependant, si les exécutables impliqués sont grands, quels sont les miens. L'autre façon dont je pensais était d'écrire un utilitaire delphi à 2 lignes qui essaie de renommer un fichier en un nom aléatoire, et le renomme en cas de succès, et renvoie un code de sortie nul si ce n'est pas le cas. – rossmcm