Je travaille sur un fichier de commandes Windows qui bcp trois fichiers texte dans SQL Server. Si quelque chose ne va pas en production, je veux pouvoir remplacer les noms de fichiers. Donc, je pense à faire quelque chose comme ça.
bcp.exe MyDB..MyTable1 in %1 -SMyServer -T -c -m0
bcp.exe MyDB..MyTable2 in %2 -SMyServer -T -c -m0
bcp.exe MyDB..MyTable3 in %3 -SMyServer -T -c -m0
J'aimerais pouvoir entrer des noms par défaut pour les trois fichiers, à utiliser si les paramètres de position ne sont pas fournis. L'idée serait soit d'exécuter
myjob.bat
sans paramètres, et le faire utiliser les valeurs par défaut, ou exécuter
myjob.bat "c:\myfile1" "c:\myfile2" "c:\myfile3"
et le faire utiliser ces fichiers. Je n'ai pas été en mesure de déterminer comment déterminer si% 1,% 2 et% 3 existent et/ou sont nuls. Je ne sais pas non plus comment définir ces valeurs de manière conditionnelle. Est-ce possible? Toute suggestion serait appréciée.
Pour vérifier l'existence d'un paramètre de ligne de commande, utilisez des crochets vides:
IF [%1]==[] echo Value Missing
ou
IF [%1] EQU [] echo Value Missing
La page SS64 sur IF vous aidera ici. Sous "% 1 existe-t-il?".
Vous ne pouvez pas définir de paramètre de position. Vous devez donc faire quelque chose comme:
SET MYVAR=%1
Vous pouvez ensuite réinitialiser MYVAR en fonction de son contenu.
Les deux réponses données sont correctes, mais la mienne est un peu différente. Vous voudrez peut-être envisager quelques choses ...
Commencez le lot avec:
SetLocal
et terminer avec
EndLocal
Ceci gardera tous vos 'SETs' pour être seulement valide pendant la session en cours, et ne laissera pas de vars nommés comme "FileName1" ou toute autre variable que vous avez définie pendant l'exécution, qui pourrait interférer avec la prochaine exécution du fichier de commandes. Donc, vous pouvez faire quelque chose comme:
IF "%1"=="" SET FileName1=c:\file1.txt
L’autre astuce consiste à ne déplacer que 1 ou 2 paramètres et à utiliser la commande SHIFT pour les déplacer. Ainsi, celui que vous recherchez est TOUJOURS à% 1 ...
Par exemple, traitez le premier paramètre, décalez-le, puis recommencez. De cette façon, vous ne coderez pas en dur% 1,% 2,% 3, etc ...
Le traitement par lots de Windows est beaucoup plus puissant que les utilisateurs ne le reconnaissent .. J'ai fait quelques trucs fous avec, y compris le calcul de la date d'hier, même au-delà des mois et des années, y compris l'année bissextile, la localisation, etc.
Si vous voulez vraiment faire preuve de créativité, vous pouvez appeler des fonctions dans le traitement par lot ... Mais c'est vraiment pour une discussion différente ... :)
Oh, et ne nommez pas vos fichiers batch . Bat non plus .. Ils sont . Cmd maintenant .. heh ..
J'espère que cela t'aides.
La bonne chose serait d'utiliser une instruction "si défini", qui est utilisée pour tester l'existence d'une variable. Par exemple:
IF DEFINED somevariable echo Value exists
Dans ce cas particulier, la forme négative doit être utilisée:
IF NOT DEFINED somevariable echo Value missing
PS: le nom de la variable doit être utilisé sans les caractères "%".
rem set defaults:
set filename1="c:\file1.txt"
set filename2="c:\file2.txt"
set filename3="c:\file3.txt"
rem set parameters:
IF NOT "a%1"=="a" (set filename1="%1")
IF NOT "a%2"=="a" (set filename2="%2")
IF NOT "a%3"=="a" (set filename1="%3")
echo %filename1%, %filename2%, %filename3%
Soyez prudent avec les caractères de citation, vous pouvez ou non en avoir besoin dans vos variables.