2010-09-15 12 views
1

H gars, en utilisant un script batch Windows Je cherche à passer une commande x fois avec un argument différent à chaque fois, les arguments étant analysés depuis un fichier.Script batch pour lire le contenu d'un fichier dans un tableau

ont par exemple un fichier texte disant arg1 arg 2 arg3, le script batch serait analyser cela et exécuter

program.exe -arg1 
program.exe -arg2 
program.exe -arg3 

Je pense lire la ligne de fichiers en ligne dans un tableau faisant alors pour chaque boucle, mais n'avoir aucune expérience avec Windows Scripting pour le faire

Répondre

1

Vous devriez être en mesure d'utiliser une boucle for. En supposant que le fichier args.txt contient les paramètres, cela devrait fonctionner:

for /f %a in (args.txt) do program.exe -%a 

Modifier En fonction du processeur de commande que vous utilisez, vous devrez peut-être utiliser deux % symboles dans une ligne de la commande si vous exécutez la déclaration ci-dessus dans un fichier batch. Il n'est pas nécessaire lors de l'utilisation de l'invite de commande very nice JP Software. Je pense, cependant, il est nécessaire avec les invites par défaut cmd.exe/command.com.

for /f %%a in (args.txt) do program.exe -%%a 
1

Très bien, on y va ... recall.bat. Vous devez toujours fournir 1 argument - l'exécutable à appeler à chaque fois. Vous devez également créer un fichier d'argument: args.txt par défaut qui doit avoir un argument par ligne. Si l'argument contient des espaces ou des caractères spéciaux, il doit être échappé.

Source:recall.bat

@echo off 
setLocal EnableDelayedExpansion 

::: recall.bat - Call an executable with a series of arguments 
::: usage: recall $exec [$argfile] 
:::  exec - the executable to recall with arguments 
:::  argfile - the file that contains the arguments, if empty will 
:::    default to args.txt 
::: argfile format: 
::: One argument per line, quote-escaped if there's spaces/special chars 
if "%~1"=="" findstr "^:::" "%~f0"&GOTO:EOF 

set argfile=args.txt 
:: Reset argfile if supplied. 
if "%~2" neq "" set argfile="%~2" 
:: Remove quotes 
set argfile=!argfile:"=! 

for /f "tokens=*" %%G in (%argfile%) do (
    call %1 %%G 
) 

Exemple:

args.txt

hello 
world 
"hello world" 

Appel:

recall echo args.txt 

Sortie:

hello 
world 
"hello world" 
Questions connexes