Fonctionnalités cachées des fichiers de commandes Windows

232

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? )

Chris Noe
la source

Réponses:

185

Poursuite de la ligne:

call C:\WINDOWS\system32\ntbackup.exe ^
    backup ^
    /V:yes ^
    /R:no ^
    /RS:no ^
    /HC:off ^
    /M normal ^
    /L:s ^
    @daily.bks ^
    /F daily.bkf
Chris Noe
la source
2
Je cherchais ça la semaine dernière! (je ne me souviens pas du personnage)
chilltemp
21
Le ^ est vraiment un caractère de citation. En l'utilisant, vous pouvez citer <et> afin qu'ils ne redirigent pas la sortie. Le ^ à la fin d'une ligne permet également la poursuite de la ligne.
Cheeso
Pourriez-vous expliquer ce petit scriptlet?
guerda
2
@furtelwart: Ceci est la même chose que si vous avez écrit tout en une seule ligne: 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 simplement C:\WINDOWS\system32\ntbackup.exe /?.
Kurt Pfeifle
La discussion approfondie sur ce sujet, lors de commandes longues réparties sur plusieurs lignes
jeb
150
PUSHD path

Vous amène au répertoire spécifié par chemin .

POPD

Vous ramène au répertoire à partir duquel vous avez "poussé".

corbeau
la source
5
Cela fonctionne également comme une pile complète, vous pouvez donc pousser de nombreux répertoires sur la pile, puis continuer à apparaître pour revenir où vous étiez.
Kibbee
Sérieusement? Comment n'ai-je jamais entendu parler de cette fonctionnalité auparavant?!
Josh Hinman
4
Exécutez 'cmd.exe' puis tapez 'help', puis tapez 'help pushd' ou 'pushd /?'.
paxdiablo
86
Si vous poussez vers un chemin UNC, il mappera automatiquement un lecteur pour vous et le popd le démappera.
Ferruccio
2
+1 spécialement pour la capacité UNC, vous devez ajouter cela à votre réponse.
Adam Mitz
109

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:

C:\some_directory> start .

Cela ouvrira l'Explorateur Windows dans le dossier "some_directory".

J'ai trouvé cela un excellent gain de temps.

LeopardSkinPillBoxHat
la source
1
eh bien, je l'utilise aussi. J'ai un fichier "open.cmd" dans l'un des répertoires PATH, et la seule chose dans ce fichier est "@start". ;)
Paulius
5
'explorer' fait également la même chose que 'start' C: \ some_directory> explorer.
Ray
1
J'ai tendance à taper ceci comme [start "". ] (crochets pour plus de clarté) parce que le début est parfois capricieux lorsque le premier paramètre est un titre.
système PAUSE
1
S'il vous arrive d'être sur un Mac, open .fait la même chose.
Grant Paul
1
startfait 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 ...
idbrii
87

J'ai toujours eu du mal à lire les commentaires marqués par un mot-clé sur chaque ligne:

REM blah blah blah

Plus facile à lire:

:: blah blah blah
Chris Noe
la source
8
J'ai entendu :: est plus efficace que REM parce que REM essaie de faire une expansion de variable d'environnement sur les choses qui se produisent après, mais :: ne le fait pas.
Scott Langham
47
En fait, :: est juste une étiquette avec un drôle de nom; à cet effet, :: ne fonctionnera pas si vous l'utilisez dans un bloc (entre parenthèses) car les étiquettes n'y sont pas autorisées non plus. REM y travaille bien sûr.
mihi
Notez cependant qu'il rems'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é.
Joey
Vous pouvez même utiliser goto :pour passer à l'étiquette. :-)et goto -)fonctionnera également.
Sven Marnach
79

Sous-chaînes variables:

> set str=0123456789
> echo %str:~0,5%
01234
> echo %str:~-5,5%
56789
> echo %str:~3,-3%
3456
Chris Noe
la source
3
Moche, mais très utile!
guerda
1
@furtelwart sonne comme ça pourrait être la devise du lot
rzrgenesys187
c'est génial pour formater les dates (mais le problème que j'ai trouvé était que vista / 7 et xp produisaient DATE différemment)
Daniel
Notez que malheureusement, cela ne peut pas être combiné avec les variables locales des boucles FOR ( 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.
RolKau
C'est une laideur inévitable si vous voulez faire quelque chose avec les dates (par exemple les noms de fichiers de sauvegarde). Après avoir été témoin de la laideur générale de la ligne de commande Windows, je vois pourquoi Windows est principalement pointer et cliquer :) Bien qu'ils disent que le nouveau PowerShell est meilleur.
Halil Özgür
72

La commande FOR ! Bien que je déteste écrire des fichiers batch, j'en suis reconnaissant.

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

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.

TheSoftwareJedi
la source
4
J'ai trouvé les boucles FOR des fichiers batch limitées et terribles à écrire, mais elles sont parfois utiles.
ya23
2
Excusez ma perplexité, mais comment diable est-ce sous-utilisé? Je pense que si vous ne connaissez pas les boucles FOR, vous ne connaissez pas les scripts batch.
Codage avec style le
11
Sous-utilisée ou non, c'est de la torture. (Certains diraient un mal nécessaire.)
harpo
J'ai dû l'utiliser plusieurs fois et la personne qui a créé cette syntaxe devrait être renvoyée. D'un canon. Dans le soleil. C'est SI mauvais.
VitalyB
1
@CodingWithStyle: Chaque fois que j'ai besoin d'écrire une boucle for dans un fichier batch, le script devient un lanceur bash et réécrit le script en bash (ou python) à la place
:)
60

Plutôt que de jeter un script avec REM ou :: lines, je fais ce qui suit en haut de chaque script:

@echo OFF
goto :START

Description of the script.

Usage:
   myscript -parm1|parm2 > result.txt

:START

Notez comment vous pouvez utiliser les caractères de canal et de redirection sans les échapper.

Patrick Cuff
la source
3
Ce serait encore plus cool si vous vérifiiez le% 1 pour "/?" et ensuite vous pourriez faire écho à cette section en tant que texte d'aide.
demoncodemonkey
6
Hmm, programmation batch alphabétisée?!
Muhammad Alkarouri du
54

Le chemin (avec lecteur) où se trouve le script: ~ dp0

set BAT_HOME=%~dp0
echo %BAT_HOME%
cd %BAT_HOME%
RealHowTo
la source
J'utilise habituellement% CD% pour cela. Peut-être qu'il n'est pas disponible dans toutes les versions du shell DOS?
Saul Dolgin
11
% CD% est le répertoire actuel tandis que% ~ dp0 est le répertoire où se trouve le script en cours d'exécution.
RealHowTo
De plus, je ne pense pas que% CD% existait avant ... XP, peut-être. Je sais que certaines anciennes versions de Windows ne l'ont pas.
Thomas Owens
1
Vous devez utiliser cd / d% BAT_HOME% à la place, si la chauve-souris se trouve dans un autre lecteur. Si je me souviens bien, cela ne fonctionnera pas avec les anciens DOS.
kétorine
cd ou pushd% BATH_HOME% ne fonctionnera pas si vous exécutez un lot sur un chemin réseau.
Benoit
49

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,

@echo off
echo %0
echo %~d0
echo %~p0
echo %~dp0
echo %~x0
echo %~s0
echo %~sp0

vous obtenez la sortie suivante

test
c:
\Temp\long dir name\
c:\Temp\long dir name\
.bat
c:\Temp\LONGDI~1\test.bat
\Temp\LONGDI~1\

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.

@echo off
echo %0
call :test
goto :eof

:test
echo %0
echo %~0
echo %~n0

La sortie est (le fichier batch est démarré avec myBatch.bat)

myBatch.bat
:test
:test
myBatch
Hartmut
la source
43

En utilisant CALL, EXIT / B, SETLOCAL & ENDLOCAL, vous pouvez implémenter des sous-programmes avec des variables locales.

exemple:

@echo off

set x=xxxxx
call :sub 10
echo %x%
exit /b

:sub
setlocal
set /a x=%1 + 1
echo %x%
endlocal
exit /b

Cela imprimera

11
xxxxx

même si: sub modifie x.

Ferruccio
la source
6
Vous devriez plutôt utiliser goto: eof au lieu de exit / b, fait la même chose mais c'est la façon la plus standard de le faire.
Philibert Perusse
2
Il y a une norme pour ça? O_o
Paulius
3
Mon erreur. Je pensais que vous vouliez définir explicitement une étiquette: eof et y aller. Je ne savais pas qu'il y avait une étiquette implicite: eof à la fin de chaque fichier de commandes.
Ferruccio
3
Cependant, si vous souhaitez qu'un sous-programme définisse un niveau d'erreur, vous devrez utiliser exit / b. Par exemple: exit / b 3
Chris Noe
6
J'ai trouvé préférable d'utiliser "exit / B" au lieu de "goto: eof" pour revenir d'un sous-programme, "goto: eof" a le problème que vous pouvez renvoyer un code d'erreur lorsque vous souhaitez l'avaler. Par exemple, si vous utilisez "if exist someFile echo it's here", cela définira le niveau d'erreur si someFile n'existe pas, mais ce n'est pas faux, et ce n'est pas un code d'erreur que vous voudriez renvoyer (ce qui est " goto: eof "ferait l'affaire).
Scott Langham
42

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.

    echo %time%
    call :waitfor 5
    echo %time%
    goto :eof
:waitfor
    setlocal
    set /a "t = %1 + 1"
    >nul ping 127.0.0.1 -n %t%
    endlocal
    goto :eof
paxdiablo
la source
2
Encore mieux est de le mettre dans un fichier comme sleep.bat pour vous éviter d'avoir à le réécrire encore et encore.
erjiang
1
... et placez sleep.bat dans un répertoire de la variable d'environnement PATH
Scoregraphic
Je suis contre la mise à l'extérieur, rend le moins portable ... sur les systèmes Windows.
sorin
37

Échapper à la "plomberie":

echo ^| ^< ^> ^& ^\ ^^
Chris Noe
la source
3
Je parie que le caractère d'échappement DOS n'est pas bien connu. Bon.
Joshua
12
Ah, ça expliquerait pourquoi c'est aussi l'opérateur de continuation de ligne - il échappe à la nouvelle ligne, tout comme \ in bash ...
leander
@leander: Oui, mais il ne peut échapper qu'au LF (et non au CR), car tous les CR sont supprimés avant
jeb
Donc , c'est pourquoi l' utilisation git sous Windows pour diff contre la précédente livraison ( ) est problématique. HEAD^
Daniel Trebbien
31

Être en mesure d'exécuter des commandes et de traiter la sortie (comme des astuces de '$ ()' dans bash).

for /f %i in ('dir /on /b *.jpg') do echo --^> %i

S'il y a des espaces dans les noms de fichiers, utilisez ceci:

for /f "tokens=*" %i in ('dir /on /b *.jpg') do echo --^> %i
paxdiablo
la source
2
Ne fonctionne pas avec les noms de fichiers qui ont des espaces dans leurs noms ... Cela fonctionne: pour / f "tokens = *"% i in ('dir / on / b * .jpg') do echo - ^>% i
doekman
Bonne prise. Personnellement, je pense que les espaces dans les noms de fichiers sont des choses hideuses maléfiques des profondeurs du neuvième cercle de l'enfer. Mais nous devons en prendre soin, je suppose.
paxdiablo
C'est la syntaxe la plus folle que j'ai jamais vue. Cela fonctionne-t-il si vous avez créé ce backtick.bat et transmis la chaîne?
idbrii
30

Création d'un fichier vide:

> copy nul filename.ext
nzpcmad
la source
6
@devio: écho. met une ligne vide. pour que le fichier ne soit pas vide!
Paulius
4
J'utilise type nul > filename.extpour ça.
Benoit
Bien, je me demandais s'il y avait un équivalent tactile depuis longtemps.
jdelator
ren > blah.txt
Que
28

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.

PSKILL NOTEPAD >nul 2>&1

EDIT: Voir Ignorer la sortie d'une commande pour une explication de son fonctionnement.

aphorie
la source
1
Savez-vous comment cela fonctionne? Quelle est la signification du bit 2> & 1?
Scott Langham
12
Le> nul redirige STDOUT vers nul. Le 2> & 1 redirige STDERR vers l'endroit où STDOUT pointe.
aphoria
Plus précisément, je pense que le 2> & 1 est un "clone de descripteur de fichier", définissant STDERR sur un clone de STDOUT. Le placer après le> NUL est important, car vous voulez cloner STDOUT après qu'il ait été redirigé, pas avant. (Veuillez me corriger si je me trompe ici.)
leander
1
Pour ceux d'entre vous qui se demandent d'où vient PSKILL, consultez sysinternals.com . Si vous êtes sur une édition Pro, vous devriez avoir une commande TSKILL native plus ou moins identique.
Codage avec style
1
Si vous n'avez pas pskill ou tskill, la plupart des systèmes Windows que j'ai utilisés sont livrés avec taskkill.
idbrii
25
PAUSE

Arrête l'exécution et affiche l'invite suivante:

Appuyez sur n'importe quelle touche pour continuer . . .

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.

corbeau
la source
J'appellerais à peine cela "sous-utilisé" alors que je le marque à la fin de chaque script que j'écris. Là encore, cela ne fonctionne pas si bien lorsque vous voulez que votre IDE exécute le script et capture la sortie, car l'IDE n'a aucun moyen d'appuyer sur Entrée pour vous habituellement ...
Nicholas Flynt
15
Une caractéristique intéressante de la "pause" est que s'il n'y a pas de terminal autour pour recevoir une "n'importe quelle clé" (par exemple si votre fichier de commandes est exécuté à partir d'un service système), il le détecte et continue simplement ...
leander
4
+1 à Charlie Somerville, c'est tellement connu que le `` go.bat '' de tous les programmeurs de jeux l'a utilisé au début des années 90.
LiraNuna
6
Au lieu de polluer tous vos fichiers batch (et de les rendre ennuyeux à utiliser pour les geeks CLI), vous pouvez utiliser Démarrer / Exécuter / puis taper 'cmd / k' et le nom du fichier batch. OU remplacez la chaîne par défaut HKCR \ batfile \ shell \ open \ command par 'cmd / k "% 1"% *'. OU créez un autre fichier batch qui exécute simplement '@cmd / k $ *', placez-le sur le bureau et déposez vos autres fichiers batch dessus. Il existe de nombreuses alternatives à PAUSE. Veuillez les considérer.
système PAUSE du
1
@gnud: vous pouvez toujours rediriger vers le script: echo.|batch-with-pause.bataura le même effet que d'appuyer sur la touche "n'importe quelle touche" ...
Kurt Pfeifle
25

L'équivalent du bash (et des autres obus)

echo -n Hello # or
echo Hello\\c

qui génère " Hello" sans retour à la ligne. Un hack cmd pour ce faire:

<nul set /p any-variable-name=Hello

set /pest 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 à la set /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.

paxdiablo
la source
18

Recherchez et remplacez lors de la définition des variables d'environnement:

> @set fname=%date:/=%

... supprime le "/" d'une date pour l'utiliser dans les noms de fichiers horodatés.

et les sous-chaînes aussi ...

> @set dayofweek=%fname:~0,3%
SqlACID
la source
17

Arithmétique entière:

> SET /A result=10/3 + 1
4
Chris Noe
la source
Depuis combien de temps SET a-t-il la capacité de calculer? Windows XP?
chakrit
1
Si vous demandez quelle peut être la taille des valeurs, je pense que c'est 32 bits. Donc +/- 2 milliards.
Chris Noe
1
Je pense que la question était: combien de temps SET a-t-il pu calculer? Depuis Windows XP?
Michael Myers
3
Je pense que SET de CMD.EXE est capable de calculer depuis NT 3.1 ou plus. Il a juste fallu beaucoup de temps à quiconque pour remarquer que CMD.EXE n'était pas exactement le même que COMMAND.COM ...
RBerteig
16

Séparateurs de commandes:

cls & dir
copy a b && echo Success
copy a b || echo Failure

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é.

doekman
la source
15

Sortie d'une ligne vierge:

echo.
paxdiablo
la source
15

Vous pouvez enchaîner les instructions if pour obtenir un effet comme un booléen court-circuitant `et '.

if foo if bar baz
Jack
la source
1
C'est vraiment juste un raccourci pour imbriquer des ifs: if foo ( if bar ( baz ) )(Imaginez des nouvelles lignes après les crochets.)
idbrii
14

Pour convertir rapidement un fichier texte Unicode (16 bits / caractère) en fichier DOS ASCII (8 bits / caractère).

C:\> type unicodeencoded.txt > dosencoded.txt

en bonus, si possible, les personnages sont correctement mappés.

RealHowTo
la source
1
C'est un fichier DOS ANSI - ASCII est 7bit / char.
MarkJ
Lol, celui-ci est un anti-pattern, cette conversion est susceptible d'échouer. Le seul codage 8 bits prenant en charge Unicode est l'UTF-8, mais grâce à M $, vous ne pouvez pas définir la page de codes UTF-8 sur Windows.
sorin
14

si structure de bloc:

if "%VS90COMNTOOLS%"=="" (
  echo: Visual Studio 2008 is not installed
  exit /b
)
Ferruccio
la source
3
Tant que vous savez que les variables seront développées en une seule fois (sans expansion retardée) - c'est-à-dire que vous ne pouvez pas raisonnablement y utiliser% ERRORLEVEL%.
Duncan Smart
Vous ne pouvez pas non plus y utiliser d'étiquettes (qui incluent ces commentaires :: style) car cela mettra fin prématurément à l'instruction if.
Codage avec style
2
@Duncan: De toute façon, vous ne devriez pas utiliser la pseudo-variable %ERRORLEVEL%; c'est pour ça if errorlevel <foo>. Et cela fonctionne en fait dans de tels blocs.
Joey
12

Expansion retardée des variables (avec des sous-chaînes ajoutées pour faire bonne mesure):

    @echo off
    setlocal enableextensions enabledelayedexpansion
    set full=/u01/users/pax
:loop1
    if not "!full:~-1!" == "/" (
        set full2=!full:~-1!!full2!
        set full=!full:~,-1!
        goto :loop1
    )
    echo !full!
    endlocal
paxdiablo
la source
12

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.

@title Searching for ...
:: processing search
@title preparing search results
:: data processing
Hartmut
la source
2
Intéressant. Bien que par la suite, vous perdiez apparemment la fonctionnalité normale, qui consiste à afficher la commande en cours d'exécution. Y a-t-il un moyen de réinitialiser cela?
Chris Noe
2
technet.microsoft.com/en-us/library/bb491017.aspx dit qu'il peut être réinitialisé avec "title" tout seul, mais cela ne semble pas fonctionner sous Windows 7 ...
ℳ.
11

Vous n'avez pas d'éditeur à portée de main et avez besoin de créer un fichier batch?

copy con test.bat

Tapez simplement les commandes, appuyez sur Entrée pour une nouvelle ligne. Appuyez sur Ctrl-Z et Entrée pour fermer le fichier.

Hartmut
la source
4
Hé, ça me ramène.
Codage avec style
11

exemple de soustraction de chaîne sur dateet timepour obtenir le fichier nommé "AAAA-MM-JJ HH: MM: SS.txt"

echo test > "%date:~0,4%-%date:~5,2%-%date:~8,2% %time:~0,2%_%time:~3,2%_%time:~6,2%.txt"

J'utilise colorpour 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 loin

couleur XY

où X et Y est la valeur hexadécimale de 0à F, où X - fond, Y - texte, lorsque X = Y la couleur ne changera pas.

couleur Z

change la couleur du texte en «Z» et définit un fond noir, «couleur 0» ne fonctionnera pas

pour les noms de couleurs, appelez

Couleur ?

MoreThanChaos
la source
édité; les _ ont été interprétés en italique. Joli morceau de code.
@Duncan Smart: pas vrai, fonctionne également en anglais britannique (bien que techniquement, cela devrait être "color", grrr)
demoncodemonkey
10

Contrôle total de la sortie avec des caractères d'espacement et d'échappement:

echo.    ^<resourceDir^>/%basedir%/resources^</resourceDir^>
paxdiablo
la source
1
Comment ça marche? Le point délimite le début de la sortie de texte?
Chris Noe
3
"echo. x" produira "<space> x", "echo x" ne produira que "x". Cela permet d'ouvrir des espaces. De plus, le caractère d'échappement "^" empêchera cmd de penser que tous ces caractères "<" et ">" sont une redirection d'E / S.
paxdiablo
1
echo (est mieux, car echo. crée une recherche de fichier pour un fichier nommé "echo" si ce fichier existe, l'écho. échoue, sinon l'écho interne est exécuté, mais il est plus lent que echo (
jeb
9

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.

for /f "tokens=2-4 delims=/- " %a in ('DATE/T') do echo %c%b%a
remonedo
la source
2
Sûrement DATE / T renvoie le 29/10/2008 en Europe et le 10/29/2008 aux États-Unis ... donc une localisation peut être nécessaire! ;-)
C'est vrai! Mais vous pouvez abuser de la commande date pour savoir quel format de date est utilisé.
remonedo
4
C'est une utilisation excessive de FOR, imo. Je pense que j'utiliserais simplement% DATE: ~ 10,4 %% DATE: ~ 4,2 %% DATE: ~ 7,2% pour cela plutôt que d'exécuter une commande de date, puis de l'analyser pour.
Codage avec style