Windows bash, les commandes que l'on ne devrait pas oublier (.bat batch dos)
Par PlaceOweb le vendredi, décembre 28 2007, 00:24 - Bash - Lien permanent
Pas évident de trouver de l'aide française sur l'utilisation du shell DOS afin de créer des fichiers batch .bat s'exécutant sous le DOS.
Si vous rechercher la même chose sous Linux, suivez ce lien : mémo sur Linux des commandes utiles
Batch DOS
- FR
- FAQ De nombreuses questions et leurs réponses sur la création de fichiers Batch
- .bat
- DOS
- Liste des commandes MS-DOS
- Le MS-DOS
- Le DOS: 4. commandes systèmes
- Quelques exemples de fichiers Batch
- EN
- Documentation officielle de Microsoft sur les commandes
- La référence sur le batch windows (.bat) en ligne de commande : Batch File Command Reference for Windows
- Modern Batch Programming Tutorial (Win 2k/XP)
- Batch file
- DOS
- List of MS-DOS commands
Les commandes DOS
- An A-Z Index of Windows CMD commands
- START : Start a program, command or batch script (opens in a new window.)
- Docs Windows Server Commandes Windows Commandes par rôle serveur : start Démarre une fenêtre d’invite de commandes distincte pour exécuter un programme ou une commande spécifique.
- Introduction aux commandes batch
- Qu’est-ce qu’un fichier batch ou Bat ? START : exécute un fichier avec l’application standard
Les commandes DOS indispensables
Où si site l'executable ? where ?
C:\>where java
C:\jdk-15\bin\java.exe
Afficher le contenu d'un fichier : "type" (équivalent Windows du "cat" Linux)
type "C:\WINDOWS\win.ini"
C:\>type /?
Affiche le contenu d'un ou plusieurs fichiers texte.
TYPE [lecteur:][chemin]nom_de_fichier
C:\>type comodo.txt
Heur.Dual.Extensions@-1 C:\Program Files (x86)\Copie de PocketPC Installer Professional\PPI.ini.exe
Heur.Suspicious@192646731 C:\WINDOWS\mui\FALLBACK\040c\External\muiwres\wnetsetup.exe.mu_|wnetsetup.exe.mui
Heur.Suspicious@192646429 C:\WINDOWS\mui\FALLBACK\040c\External\muiwres\wrtcshare.exe.mu_|wrtcshare.exe.mui
Heur.Suspicious@192646731 C:\WINDOWS\SysWOW64\mui\040C\netsetup.exe.mui
Heur.Suspicious@192646429 C:\WINDOWS\SysWOW64\mui\040C\rtcshare.exe.mui
Rechercher dans un fichier ou flux : "find" et "findstr" (équivalent Windows du "grep" Linux)
netstat -a -b -n | find "3873"
findstr /C:"3873" server.log > matche.txt
C:\>find /?
Recherche une chaîne de texte dans un ou des fichiers.
FIND [/V] [/C] [/N] [/I][/OFF[LINE]] "chaîne" [[lecteur:]
[chemin]nom_de_fichier[ ...]]
/V Affiche toutes les lignes ne contenant pas la chaîne spécifiée.
/C Affiche seulement le nombre de lignes contenant la chaîne.
/N Affiche les numéros de ligne avec les lignes affichées.
/I Ignore la casse lors de la recherche de la chaîne.
/OFF[LINE] Ne pas ignorer les fichiers dont l'attribut hors connexion a été
réglé.
"chaîne" Spécifie la chaîne de texte à trouver.
[lecteur:][chemin]nom_de_fichier
Spécifie un ou des fichiers pour la recherche.
Sans nom de chemin, FIND recherche le texte entré à l'invite ou redirigé
depuis une autre commande.
C:\>find "net" comodo.txt
---------- COMODO.TXT
Heur.Suspicious@192646731 C:\WINDOWS\mui\FALLBACK\040c\External\muiwres\wnetsetup.exe.mu_|wnetsetup.exe.mui
Heur.Suspicious@192646731 C:\WINDOWS\SysWOW64\mui\040C\netsetup.exe.mui
C:\>type comodo.txt | find "net"
Heur.Suspicious@192646731 C:\WINDOWS\mui\FALLBACK\040c\External\muiwres\wnetsetup.exe.mu_|wnetsetup.exe.mui
Heur.Suspicious@192646731 C:\WINDOWS\SysWOW64\mui\040C\netsetup.exe.mui
Lister tous les fichiers de tous les dossiers en récursif
rem tous les fichiers et dossiers
DIR /-A /-B /-O /-P /-S /-W
rem uniquement les fichiers (toujours en récursif)
DIR /A:-D /-B /-O /-S /-W
Uptime sous Windows (date du dernier démarrage de votre windows)
net statistics server
C:\Documents and Settings\toto>net statistics server Statistiques de serveur de \\MONSERVEUR Statistiques depuis 22/06/2008 23:04
Comme l'indique Afficher l'uptime sous Windows, on peut extraire uniquement la ligne qui nous intéresse :
net statistics server | find "depuis"
Également, on le retrouve affiché dans le Gestionnaire des tâches de Windows (taskmgr), onglet "Performance", "En activité : jour:heure:min:sec"
Script de reboot automatique du serveur : RebootServeur.bat
echo OFF
@echo REBOOT DU SYSTEME EN COURS...
shutdown /r /f /m \\127.0.0.1 /t 100 /c "Reboot hebdomadaire" /d p:0:0
@echo FIN DU SCRIPT
net send * "Le serveur sera redémarré ce week-end. Merci de fermer correctement votre session (Démarrer->Fermer la session) en partant en week-end, et bon week-end."
Le port est utilisé occupé par quel processus application ?
netstat -ano | find ":8080"
tasklist | find "782"
- Identifier le programme qui utilise ou bloque des ports TCP spécifiques dans Windows
- Savoir quel programme à ouvert quel port
FTP passif (passive) en ligne de commandes : LITERAL PASV
C:\Documents and Settings\toto>ftp ftp.monserveur.net
Connecté à sdsl.monip.fr. 220-Welcome to Pure-FTPd. 220-You are user number 3 of 10 allowed. 220-This is a private system - No anonymous login 220 You will be disconnected after 15 minutes of inactivity. Utilisateur (sdsl.monip.fr:(none)) : utilisateur 331 User utilisateur OK. Password required Mot de passe : 230-User utilisateur has group access to: www 230 OK. Current restricted directory is / ftp> set passiv Commande non valide. ftp> set pasiv Commande non valide. ftp> PASV Commande non valide. ftp> LITERAL PASV 227 Entering Passive Mode (72,93,35,50,136,86) ftp> ls 200 PORT command successful 425 Could not open data connection to port 3172: Connection timed out
Processus Windows (Gestionnaire des tâches de Windows)
taskmgr (raccourci clavier : Ctrl+Shift+Esc)
Le gestionnaire des services
services.msc
L'éditeur de configuration système, programmes et services lancés au démarrage
Diagnostiquer les programmes au démarrage de Windows, pourvoir les désactiver, consulter et gérer les services installés sur votre ordinateur, etc..
msconfig
Gestion de l'ordinateur
compmgmt.msc
Gestion des disques
diskmgmt.msc
Ajout /Suppression de programmes en ligne de commande
Appwiz.cpl
La commande type
sous Windows est l'équivalent de cat
sous Linux
type file1.txt file2.txt >> file3.txt
La commande fc
sous Windows est l'équivalent de diff
sous Linux
fc /N /L "fichier1.txt" fichier2.txt"
Vous pouvez également utiliser la commande "comp", ou les outils suivants :
- WinMerge (visuel)
- GnuWin : DiffUtils for Windows fournissant : cmp.exe, diff3.exe, diff.exe, sdiff.exe
- WinDiff
La date
echo %DATE%
rem 28/12/2011
echo %TIME%
rem 12:56:33,82
echo %date:~0,2%-%date:~3,2%-%date:~6,4%
rem 28-12-2011
rem la date au format américain :
echo %date:~6,4%-%date:~0,2%-%date:~3,2%
rem 2011-28-12
Remplacement de chaines de caractères
Remplacer supprimer les quotes
Supprimer toutes les double quotes
set var=%var:"=%
- Removing double quotes from variables in batch file creates problems with CMD environment
- DOS - String Manipulation
- Collection of batch techniques and tips dating back to the MS-DOS and Windows NT 4 era.
Les boucles
Boucle FOR
- FOR : Conditionally perform a command several times.
- FOR Windows NT 4/2000/XP Syntax
Par exemple une boucle sur la liste de fichiers :
FOR /R Loop through files (Recurse subfolders)
@echo off
SETLOCAL
set cp=.
set cp=%cp%;.\libs\axis.jar
set cp=%cp%;.\libs\jaxrpc.jar
set cp=%cp%;.\libs\commons-discovery-0.2.jar
set cp=%cp%;.\libs\commons-logging-1.0.4.jar
set cp=%cp%;.\libs\mail.jar
set cp=%cp%;.\libs\activation.jar
set cp=%cp%;.\libs\saaj.jar
set cp=%cp%;.\libs\wsdl4j-1.5.1.jar
set cp=%cp%;.\libs\Placeoweb.jar
rem FOR /R C:\temp\ %%G IN (*.bak) DO echo %%G
FOR /R "C:\fichiersXmlRecus" %%G IN (*.xml) DO (
echo %%G
copy %%G "C:\fichiersXmlRecus\fichierCopier"
java -Dfile.encoding=cp850 -cp %cp% com.placeoweb.XmlFiles
rem Un faut wait/sleep pour attendre 5secondes
ping 0.0.0.0 -n 5 > NUL
)
ENDLOCAL
NOTE : si vous utilisez call avec un for n'oubliez pas de quoter les arguments d'appel (pour ne pas perdre le contenu de la ligne après la première colonne selon le séparateur de initial : espace)
FOR /F "delims=" %%G IN (7z.listfiles.test.txt) DO CALL :ZIPER "%%G"
:ZIPER
set nomDuFichierArchive=%1%
set typeArchive=7z
set nomCompletDufichierArchive=%nomDuFichierArchive%.%typeArchive%
echo "Debut de compression de : %nomCompletDufichierArchive%"
7z a -t%typeArchive% %nomCompletDufichierArchive% %nomDuFichierArchive%
echo "Fin de compression du fichier : %nomCompletDufichierArchive%"
GOTO FIN
: FIN
La commande bat sur plusieurs lignes (éclater une longue commande sur 2 lignes ou plus) avec le caractère "^" en fin de ligne
"C:\Program Files (x86)\Common Files\Oracle\Java\javapath\java" -cp .^
;lib\jackson-annotations-2.9.0.jar^
;lib\jackson-core-2.9.5.jar^
;lib\jackson-databind-2.9.5.jar^
-jar MyJar-1.0.0.jar
Commentaires
Bonjour, BASH veut dire "bourne again shell". Il s'agit donc d'un shell ou interprêteur de commandes, comme ms-dos mais en plus souple et plus puissant, pour Unix http://fr.wikipedia.org/wiki/UNIX
Bash peut être au mieux utilisé sous windows en installant cygwin.
Il ne faut pas confondre un "batch" -qui signifie triatement par lots, un batch est juste une bête suite de commandes placées dans un fichier pour être exécutées les unes après les autres- et Bash -un puissant interprêteur de commandes utilisé par défaut sous linux par exemple.