Le code que j'ai besoin d'implémenter dans un fichier de commandes de Windows est comme celui-ci (il est actuellement en Perl): Mes questions sont les suivantes: P> Merci de votre attention. Si vous connaissez les réponses, ou avez-vous des idées / indices sur la manière d'atteindre la réponse, merci de les partager. P> Edit: je travaille dans Windows. Je peux utiliser uniquement tout ce qui est fourni avec Windows par défaut et cela signifie que je ne peux pas utiliser les utilitaires UNIX. P> P>
6 Réponses :
Je pense que c'est trop de douleur à faire dans cmd.exe, et même impossible, même si je me trompe peut-être sur le dernier. p>
Vous feriez mieux d'utiliser WSH (hôte de script Windows), ce qui vous permet d'utiliser Jscript ou VBScript et est présent dans presque tous les systèmes. (Et vous pouvez fournir une redistribuabilité si vous le souhaitez) p>
Split, par exemple, est très difficile à faire avec les fenêtres de base, j'imagine.
Split serait fait avec pour / f code>. Pas exactement jolie syntaxe mais pas exactement difficile non plus.
Voici un équivalent de VBScript rugueux de votre script Perl. Pour vos informations, il y a toujours le Perl pour Windows que vous pouvez utiliser, sans avoir à apprendre une autre langue. P > p>
Bonjour, merci pour le VBScript. Il semble être une bonne alternative pour le lot. En ce qui concerne Perl sous Windows, oui, j'utilise Perl sous Windows. Mais le code que je veux en lot est pour un client, qui - Dieu sait pourquoi - ne veut pas installer Perl sur son PC :-)
Vous pouvez installer Perl2exe et convertir votre script Perl en un exécutable pour la distribution.
-1 pour fournir une mise en œuvre de VBScript au lieu de Jscript (non, je plaisante)
Vous pouvez transformer le programme Perl en une .exe qui n'aura pas besoin de Perl avec Par :: Packer (même cryptage est possible). Mieux vaut utiliser Perl de la fraise pour Windows pour fonctionner avec Par :: Packer, mais à l'aide d'ActivePerl est également possible. P >
Je n'ai aucune expérience avec Perl, mais si je comprends votre commande correctement, ce serait comme ça. Méfiez-vous que les scripts par lots sont très primitifs et qu'il n'a pas de bonnes méthodes de désinfectation, certains caractères (& | surtout) vont briser cela en morceaux.
@ECHO OFF SETLOCAL SET COUNT=0 FOR /F "DELIMS=" %%A IN ('file') DO CALL :SCAN %%A :SCAN ECHO %*|FIND "xxxx">NUL IF %ERRORLEVEL%==0 ECHO xxxx is found&GOTO :EOF ECHO %*|FIND "yyyy">NUL IF %ERRORLEVEL%==0 GOTO :EOF FOR /F "TOKENS=1,2 DELIMS=:" %%A IN ('ECHO %*') DO SET ARRAY1[%COUNT%]=%%A&SET ARRAY2[%COUNT%]=%%B SET /A COUNT+=1
Mettre en place A si code> dans
pour code> en général est facile:
pour code> boucle qui itière Les lignes peuvent être écrites en utilisant le commutateur
/ F CODE>: P>
set count=0
for /f "delims=" %%s in (foo.txt) do (
echo %%s | findstr /r xxxx > NUL
if errorlevel 1 (
rem ~~~ Didn't match xxxx ~~~
echo %%s | findstr /r yyyy > NUL
if errorlevel 1 (
rem ~~~ Didn't match yyy ~~~
for /f "delims=; tokens=1,*" %%a in ('echo %%s') do (
set array1[!count!]=%%a
set array2[!count!]=%%b
set /a count+=1
)
)
) else (
echo XXX is found
)
)
La raison pour laquelle Minaev écrit Array [! Comptez!] Au lieu d'un tableau [% Nombre%] est que les variables à l'intérieur d'une boucle de boucle sont étendues dès que la boucle est exécutée, le nombre serait donc toujours lu sous la forme de 0 pendant la boucle. Il est donc nécessaire d'utiliser une expansion variable retardée de sorte que la valeur soit étendue chaque fois que la ligne est lue. Quoi qu'il en soit, mon avertissement s'applique ici aussi: si le fichier a des caractères comme <> | & le script de lot se conduira mal.
Oui, c'est le moyen de le faire dans le fichier de lots. Mais cela doit être réservé aux experts par lots qui devront le maintenir.
FOR ................. DO ( (YOUR_CONDITION && echo "YES" ) || (echo "NO") )
Premier état du type de lot que vous voulez. Bash, par exemple, peut faire beaucoup plus et beaucoup plus simple que la cmd.exe de NT. Votre réponse détermine la réponse à la question.
En particulier, travaillez-vous dans l'environnement Win32 ou UNIX?