Quelles sont les fonctionnalités les moins connues, mais importantes et utiles, des fichiers de commandes Windows?
Des lignes directrices:
- Une fonctionnalité par réponse
- Donnez à la fois une brève description de la fonctionnalité et un exemple , pas seulement un lien vers la documentation
- Limitez les réponses à la fonctionnalité native , c'est-à-dire ne nécessite pas de logiciel supplémentaire, comme le Kit de ressources Windows
Clarification: Nous nous référons ici aux scripts qui sont traités par cmd.exe, qui est la valeur par défaut sur les variantes WinNT.
(Voir aussi: Fichiers batch Windows: .bat vs .cmd? )
windows
batch-file
hidden-features
Chris Noe
la source
la source
call C:\WINDOWS\system32\ntbackup.exe backup /V:yes /R:no /RS:no /HC:off /M normal /L:s @daily.bks /F daily.bkf
. Et pour comprendre tous les paramètres de cette ligne, exécutez simplementC:\WINDOWS\system32\ntbackup.exe /?
.Vous amène au répertoire spécifié par chemin .
Vous ramène au répertoire à partir duquel vous avez "poussé".
la source
Je ne sais pas à quel point cela serait utile dans un fichier de commandes , mais c'est une commande très pratique à utiliser dans l'invite de commande:
Cela ouvrira l'Explorateur Windows dans le dossier "some_directory".
J'ai trouvé cela un excellent gain de temps.
la source
open .
fait la même chose.start
fait bien plus que simplement ouvrir le dossier actuel. Vous pouvez lui passer n'importe quel fichier et il l'ouvrira avec la visionneuse configurée. Donnez-lui une URL et votre navigateur par défaut s'ouvre, etc ...J'ai toujours eu du mal à lire les commentaires marqués par un mot-clé sur chaque ligne:
Plus facile à lire:
la source
rem
s'agit d'un mot clé documenté alors que ce::
n'est qu'un détail d'implémentation. Bien qu'il soit peu probable que::
cela cesse de fonctionner, il est généralement conseillé de ne pas se fier à un comportement non documenté.goto :
pour passer à l'étiquette.:-)
etgoto -)
fonctionnera également.Sous-chaînes variables:
la source
for %a in ...
) car elles ne nécessitent pas le signe de pourcentage de fermeture comme le font les variables d'environnement; vous devez d'abord les affecter à une variable d'environnement (en utilisant l'expansion retardée!), puis extraire une sous-chaîne.La commande FOR ! Bien que je déteste écrire des fichiers batch, j'en suis reconnaissant.
analyserait chaque ligne dans monfichier.txt, ignorant les lignes qui commencent par un point-virgule, en passant les 2e et 3e jetons de chaque ligne au corps for, avec des jetons délimités par des virgules et / ou des espaces. Remarquez les instructions for body référence% i pour obtenir le 2ème jeton,% j pour obtenir le 3ème jeton et% k pour obtenir tous les jetons restants après le 3ème.
Vous pouvez également l'utiliser pour parcourir les répertoires, le contenu des répertoires, etc.
la source
Plutôt que de jeter un script avec REM ou :: lines, je fais ce qui suit en haut de chaque script:
Notez comment vous pouvez utiliser les caractères de canal et de redirection sans les échapper.
la source
Le chemin (avec lecteur) où se trouve le script: ~ dp0
la source
Le morceau% ~ dp0 a déjà été mentionné, mais il y a en fait plus: le (s) caractère (s) après le ~ définissent les informations extraites.
Aucune lettre n'entraîne le retour du nom du fichier de patch
d - retourne la lettre de lecteur
p - retourne le chemin
s - retourne le chemin court
x - retourne l'extension du fichier
Donc si vous exécutez le script test.bat ci-dessous à partir de c: \ Temp \ long dir name \ folder,
vous obtenez la sortie suivante
Et si un paramètre est passé dans votre script comme dans le
test c: \ temp \ mysrc \ test.cpp,
les mêmes manipulations peuvent être effectuées avec la variable% 1.
Mais le résultat de l'expansion de% 0 dépend de l'emplacement!
Au "niveau supérieur" du lot, il se développe jusqu'au nom de fichier du lot actuel.
Dans une fonction (appel), elle se développe jusqu'au nom de la fonction.
La sortie est (le fichier batch est démarré avec myBatch.bat)
la source
En utilisant CALL, EXIT / B, SETLOCAL & ENDLOCAL, vous pouvez implémenter des sous-programmes avec des variables locales.
exemple:
Cela imprimera
même si: sub modifie x.
la source
Astuce sournoise pour attendre N secondes (ne fait pas partie de cmd.exe mais n'est pas un logiciel supplémentaire car il est livré avec Windows), voir la ligne de ping. Vous avez besoin de N + 1 pings car le premier ping s'éteint sans délai.
la source
Échapper à la "plomberie":
la source
HEAD^
Être en mesure d'exécuter des commandes et de traiter la sortie (comme des astuces de '$ ()' dans bash).
S'il y a des espaces dans les noms de fichiers, utilisez ceci:
la source
Création d'un fichier vide:
la source
type nul > filename.ext
pour ça.ren > blah.txt
Pour masquer toutes les sorties d'une commande, redirigez vers> nul 2> & 1.
Par exemple, certains programmes en ligne de commande affichent la sortie même si vous redirigez vers> nul. Mais, si vous redirigez la sortie comme la ligne ci-dessous, toute la sortie sera supprimée.
EDIT: Voir Ignorer la sortie d'une commande pour une explication de son fonctionnement.
la source
taskkill
.Arrête l'exécution et affiche l'invite suivante:
Utile si vous souhaitez exécuter un lot en double-cliquant dessus dans l'Explorateur Windows et que vous souhaitez réellement voir la sortie plutôt qu'un simple flash de la fenêtre de commande.
la source
echo.|batch-with-pause.bat
aura le même effet que d'appuyer sur la touche "n'importe quelle touche" ...L'équivalent du bash (et des autres obus)
qui génère "
Hello
" sans retour à la ligne. Un hack cmd pour ce faire:set /p
est un moyen d'inviter l'utilisateur à entrer des données. Il émet la chaîne donnée puis attend (sur la même ligne, c'est-à-dire pas de CRLF) que l'utilisateur tape une réponse.<nul
envoie simplement une réponse vide à laset /p
commande, de sorte que le résultat net est la chaîne d'invite émise. (La variable utilisée reste inchangée en raison de la réponse vide.)Les problèmes sont les suivants: il n'est pas possible de produire un signe égal de tête et, sous Vista, les principaux espaces sont supprimés, mais pas sous XP.
la source
Recherchez et remplacez lors de la définition des variables d'environnement:
... supprime le "/" d'une date pour l'utiliser dans les noms de fichiers horodatés.
et les sous-chaînes aussi ...
la source
Arithmétique entière:
la source
Séparateurs de commandes:
Sur la 2e ligne, la commande après && ne s'exécute que si la première commande réussit.
Sur la 3ème ligne, la commande après || ne s'exécute que si la première commande a échoué.
la source
Sortie d'une ligne vierge:
la source
Vous pouvez enchaîner les instructions if pour obtenir un effet comme un booléen court-circuitant `et '.
la source
if foo ( if bar ( baz ) )
(Imaginez des nouvelles lignes après les crochets.)Pour convertir rapidement un fichier texte Unicode (16 bits / caractère) en fichier DOS ASCII (8 bits / caractère).
en bonus, si possible, les personnages sont correctement mappés.
la source
si structure de bloc:
la source
%ERRORLEVEL%
; c'est pour çaif errorlevel <foo>
. Et cela fonctionne en fait dans de tels blocs.Expansion retardée des variables (avec des sous-chaînes ajoutées pour faire bonne mesure):
la source
Ne fournit pas beaucoup de fonctionnalités, mais vous pouvez utiliser la commande title pour quelques utilisations, comme fournir un état sur un long script dans la barre des tâches, ou simplement pour améliorer les commentaires des utilisateurs.
la source
Vous n'avez pas d'éditeur à portée de main et avez besoin de créer un fichier batch?
Tapez simplement les commandes, appuyez sur Entrée pour une nouvelle ligne. Appuyez sur Ctrl-Z et Entrée pour fermer le fichier.
la source
exemple de soustraction de chaîne sur
date
ettime
pour obtenir le fichier nommé "AAAA-MM-JJ HH: MM: SS.txt"J'utilise
color
pour indiquer si mon script se termine avec succès, échoue ou nécessite une entrée en changeant la couleur du texte et de l'arrière-plan. Cela aide vraiment quand vous avez une machine à portée de vue mais assez loinoù X et Y est la valeur hexadécimale de
0
àF
, où X - fond, Y - texte, lorsque X = Y la couleur ne changera pas.change la couleur du texte en «Z» et définit un fond noir, «couleur 0» ne fonctionnera pas
pour les noms de couleurs, appelez
la source
Contrôle total de la sortie avec des caractères d'espacement et d'échappement:
la source
TheSoftwareJedi a déjà mentionné la commande for, mais je vais le mentionner à nouveau car elle est très puissante.
Ce qui suit affiche la date actuelle au format AAAAMMJJ, je l'utilise lors de la génération de répertoires pour les sauvegardes.
la source