2010-08-06 14 views
0

J'ai un fichier batch et je dois l'appeler comme ceci "mybatch.bat -r c: \ mydir", et le fichier batch boucle dans le répertoire et écrit les noms de fichiers dans la sortie. Le problème auquel je suis confronté est que je ne peux pas lire le paramètre "-r".Utilisation de commutateurs dans le fichier de commandes

est ici à quoi il ressemble:

@echo off 
echo [%date% %time%] VERBOSE START 
for %%X in (%1\*.xml) do echo [%date% %time%] VERBOSE systemmsg Parsing XML file '%%X' 
echo [%date% %time%] VERBOSE END 

Je peux cependant utiliser% au lieu de 2% 1 et tout fonctionne très bien, mais je veux lire par le paramètre. Est-ce possible?

À la votre!

Répondre

4

Je ne suis pas entièrement sûr que je vois votre problème. %1 dans ce cas est clairement -r et vous devrait être en utilisant %2 qui est .

Si vous voulez dire que vous voulez vous assurer que l'utilisateur spécifie -r d'abord, vous pouvez utiliser quelque chose comme:

@echo off 
if not "x%1"=="x-r" (
    echo [%date% %time%] ERROR Called without -r 
    goto :eof 
) 
echo [%date% %time%] VERBOSE START 
for %%X in (%2\*.xml) do echo [%date% %time%] VERBOSE systemmsg Parsing file '%%X' 
echo [%date% %time%] VERBOSE END 

Si le -r est en option, vous pouvez souvent faire:

set fspec=%1 
set rflag=no 
if "x%fspec"=="x-r" (
    set fspec=%2 
    set rflag=yes 
) 

puis utilisez rflag et fspec. Faire un véritable parsing de paramètre indépendant de la position en batch n'est pas une tâche facile. Nous avons un sous-système qui le fait mais malheureusement, c'est exclusif. I vous dira qu'il traverse environ 80 lignes impaires et n'est pas la bête la plus rapide au monde.

Mon conseil serait d'imposer des exigences strictes des formats d'argument plutôt que de descendre le chemin indépendant de la position. Vous allez économiser beaucoup de tracas :-)

+0

Ça a l'air génial. Merci pour les conseils aussi! – ostati

0

Pourquoi ne pouvez-vous pas appeler votre fichier batch simplement comme mybatch.bat c:\mydir, alors juste évaluer %1, et être fait?

+0

J'écris des tests unitaires pour simuler ce que fait la vraie commande car j'ai besoin de lire et d'analyser la sortie. Merci! – ostati

0

Si le seul but du fichier batch est d'écrire les noms de fichiers à sortir, ne pouvez-vous pas simplement utiliser dir /b /s?