Aide-mémoire commandes UNIX

Rechercher un fichier : find répertoire -name "nom_du_fichier"
« nom_du_fichier » peut contenir des caractères jokers comme * ou ?
Rechercher les fichier qui contiennent une chaine de caractères : find ./ -name "*.xml" -exec grep "ma_chaine" {} ; -print
Ici on recherche tous les fichiers d’extension .xml contenant le mot ma_chaine
Suivre l’évolution de l’écriture dans un fichier : tail -f nom_du_fichier
Editer un fichier : vi nom_du_fichier

  • « Echap » -> Passage en commandes
  • « i », « a » ou « o » -> Passage en édition
  • Commande « x » -> Suppression caractère
  • Commande « G » -> Fin du fichier
  • Commande « $ » -> Fin de la ligne
  • Commande « 0 » -> Début de la ligne
  • Commande « dd » -> Couper la ligne
  • Commande « :w » -> Sauver
  • Commande « :q » -> Quitter
  • Commande « :wq » -> Sauver et quitter

Supprimer les retours chariot DOS d’un fichier : sed ’s/^M$//’ nom_du_fichier
(Faire ^M avec [CTRL + V puis + M])

BATCH DOS: Récupérer le chemin absolu du batch

Pushez madame !
Le chemin du batch exécuté se retrouve de cette façon :
echo %~dp0
A noter que le chemin à partir duquel on appelle ce batch se retrouve ainsi :
echo %CD%
Source : Weblogs
Ainsi, pour éxécuter un batch qui fait appel à des ressources dans son propre répertoire, le mieux est de commencer ainsi :
@echo off
pushd %~dp0

BATCH : Codes retour (errorlevel )

Dans un fichier .bat, il est souvent nécessaire de retourner un code erreur afin de vérifier son bon fonctionnement.
A la fin du fichier, il suffit d’entrer la commande exit /b number
errorlevel est une instruction qui retourne le code erreur le plus élevé retourné durant l’exécution du batch.
En faisant if errorlevel 3 exit /b 3, on teste si il y a eut une erreur durant le script, et on sort avec ce même code erreur
Le code complet serait :

if errorlevel 3 exit /b 3
if errorlevel 1 exit /b 1
if errorlevel 0 exit /b 0

ATTENTION, si le code erreur est 3, alors errorlevel 3 renvoie vrai, mais aussi errorlevel 2 ou 1, ou 0 !
Errorlevel renvoie VRAI si le code erreur est inférieur ou égal au nombre.

SQLServer / osql / isql : problème de caractères spéciaux pour lancer un scriptSQL

Avec les utilitaires OSQL ou ISQL, il est possible d’exécuter des script SQL en lignes de commande :
osql /U mon_user /P mon_password /S mon_serveur /d ma_bdd /n /i mon_fichier_de_script.sql
Cependant, si le fichier mon_fichier_de_script.sql contient des caractères spéciaux, ça risque de planter.
En effet, l’option système « Automatic ANSI to OEM conversion » est sans doute activée. De plus, il faut utiliser ISQL.
Il faut donc modifier cette clé qui se trouve en base de registre.
Pour faire propre, voici ce qu’il faut ajouter dans votre .bat pour que tout aille mieux :
–> Sous Windows 2003, on va mettre la valeur de la clé à OFF si elle était à ON :
FOR /F "TOKENS=3 DELIMS= " %%A IN (’REG QUERY HKLMSOFTWAREMicrosoftMSSQLServerClientDB-Lib /v AutoAnsiToOem’) DO SET AUTOANSITOOEM=%%A
IF /i "%AUTOANSITOOEM%" EQU "ON" (REG ADD HKLMSOFTWAREMicrosoftMSSQLServerClientDB-Lib /v AutoAnsiToOem /t REG_SZ /d OFF /f)

–> Sous Windows XP, la même chose, sauf que la boucle FOR renvoie 4 entrée, il faut choisir la bonne (SKIP=3) :
FOR /F "SKIP=3 TOKENS=3 DELIMS= " %%A IN (’REG QUERY HKLMSOFTWAREMicrosoftMSSQLServerClientDB-Lib /v AutoAnsiToOem’) DO SET AUTOANSITOOEM=%%A
IF /i "%AUTOANSITOOEM%" EQU "ON" (REG ADD HKLMSOFTWAREMicrosoftMSSQLServerClientDB-Lib /v AutoAnsiToOem /t REG_SZ /d OFF /f)

Ensuite, il faut inclure la ou les commandes ISQL UNIQUEMENT (sinon, simplement remplacer OSQL par ISQL) :
isql /U mon_user /P mon_password /S mon_serveur /d ma_bdd /n /i mon_fichier_de_script.sql
Et pour finir, remettre en place la clé de la base de registre :
IF /i "%AUTOANSITOOEM%" EQU "ON" (REG ADD HKLMSOFTWAREMicrosoftMSSQLServerClientDB-Lib /v AutoAnsiToOem /t REG_SZ /d ON /f)
Notez que l’option « Automatic ANSI to OEM conversion » est directement modifiable via l’outil cliconfg.exe.
Article adapté de cette page en anglais

XPath : Faire un uppercase sur une chaine de caractères

C’est un peu grossier, mais pratique, notamment dans les formulaires Infopath :
translate("ma_chaine", "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ")
Pour mettre en majuscule seulement la première lettre :
concat(translate(substring("ma_chaine", 1, 1), "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ"), substring("ma_chaine", 2))