Fichier de commandes de la création d'un autre fichier de commandes, comment ignorer les commandes lors de l'écriture de lignes?
avoir un peu de difficulté avec un fichier de commandes windows je suis en train d'écrire.
J'ai besoin du fichier de commandes pour écrire quelques lignes à un autre fichier de commandes, la méthode que j'ai utilisé est:
type NUL > batchfile.bat
ECHO texttobewrittentofile >> batchfile.bat
ECHO texttobewrittentofile >> batchfile.bat
ECHO texttobewrittentofile >> batchfile.bat
...
etc
La plupart des lignes d'écriture fine, il existe quelques problèmes que je vais avoir avec mon fichier de commandes d'écriture à un autre fichier de commandes.
Le code de mon fichier de commandes pour écrire dans un autre fichier de commandes est:
ECHO @echo off >> GenerateEmail.bat
ECHO ECHO Opening Stunnel >> GenerateEmail.bat
ECHO pushd .\stunnel\ >> GenerateEmail.bat
ECHO start "" stunnel.exe stunnel.conf >> GenerateEmail.bat
ECHO popd >> GenerateEmail.bat
ECHO ECHO Determining latest log for use with blat >> GenerateEmail.bat
ECHO pushd O:\Logs\%clientname%\ >> GenerateEmail.bat
ECHO for /f "tokens=*" %%a in ('dir /b /od') do set newest=%%a >> GenerateEmail.bat
ECHO popd >> GenerateEmail.bat
ECHO ECHO Generating email containing contents of latest log >> GenerateEmail.bat
ECHO pushd .\blat307\full\ >> GenerateEmail.bat
ECHO ECHO Y | xcopy "O:\Logs\%clientname%\%newest%" ".\" >> GenerateEmail.bat
ECHO blat.exe "%newest%" -to %clientemail% -cc %gmailemail% -server 127.0.0.1:1099 -subject "Offsite Backup for "%1" "%2" - %clientname%" -sig sig.txt >> GenerateEmail.bat
ECHO DEL .\*.log >> GenerateEmail.bat
ECHO popd >> GenerateEmail.bat
ECHO ECHO Closing Stunnel >> GenerateEmail.bat
ECHO pushd .\stunnel\ >> GenerateEmail.bat
ECHO stunnel.exe -exit >> GenerateEmail.bat
ECHO popd >> GenerateEmail.bat
Je ne suis pas d'obtenir le résultat désiré que je voudrais, je vais avoir des problèmes avec:
ECHO Y | xcopy "O:\Logs\%clientname%\%newest%" ".\" >> GenerateEmail.bat
sortant de l'
0 File(s) copied
et partout où j'ai besoin d' %% il sort en %, ainsi que la ligne commençant par "blat.exe" n'est-ce pas écrit du tout parmi d'autres problèmes. Est-il possible d'obtenir un fichier de commandes pour écrire des lignes de texte sans tenir compte des commandes ou des symboles contenus dans ces lignes?
Kane.
J'ai essayé des méthodes similaires en vain, par exemple pour obtenir de %de %de un je peux faire %%%a dans le fichier de commandes, le pourcentage supplémentaire signe qui ne fonctionne pas. Ainsi que les lignes contenant les commandes, j'ai besoin d'éviter l'exécution de ces commandes.
OriginalL'auteur Kane Charles | 2013-01-30
Vous devez vous connecter pour publier un commentaire.
Tous les caractères spéciaux comme
^
&
|
<
>
doit être échappé que^^
^&
^|
^<
^>
ou bien entre guillemets.Chaque pour cent doit être doublée toujours. Par exemple:
"%1"
devient"%%1"
%newest%
devient%%newest%%
%%a
devient%%%%a
Vous n'avez pas besoin d'effacer le fichier de sortie et de rediriger chaque ligne si vous mettez des parenthèses autour de tous l'ÉCHO des déclarations. Droit parenthèses doivent également être échappé si cela.
Les règles sont devenues plus compliquées si vous avez expansion retardée activé et que vous disposez de sortie qui comprend
!
, ou!
avec^
.Il existe d'autres méthodes qui permettent d'éviter d'avoir à comprendre comment échapper les caractères spéciaux et de doubler%.
Vous pouvez préfixer chaque ligne avec
:::
et l'utilisation DE /F avec FINDSTR pour obtenir le résultat souhaité. Assurez-vous d'une expansion retardée est désactivé si votre sortie contient!
. La seule restriction avec le code ci-dessous est votre sortie ligne ne peut pas commencer avec:
(il peut commencer par un espace, suivi par:
).Une autre option est d'utiliser une des techniques trouvées à:
EDIT: à la Fois vous et @wmz fourni des solutions appropriées, j'étais juste trop épais pour voir comment je pouvais les faire travailler pour moi.
Essayez
ECHO for /f "tokens=*" %%%%a in ('dir /b /od'^) do set newest=%%%%a>> GenerateEmail.bat
. Vous avez eu un problème avec déséquilibrée citations, l'origine de votre redirection d'être cité et à cet effet, ne sont pas fonctionnels.OriginalL'auteur dbenham