2010-09-15 24 views
0

Y at-il quelque chose dans un fichier BATCH qui double un caractère%?Y a-t-il quelque chose pour doubler la sortie d'un caractère%?

Le fichier test.txt INPUT contient le

Hello World 

The filename is : filename with spaces and 50% percentages signs.txt 
The %~nf removes extenstions 
Is there something to double a % charactor? 
As I would like 50% to be outputed as 50%% 
because the output of this batch is to create input for another batch. 

suivant le fichier batch.

@echo off 
setlocal EnableDelayedExpansion 

echo. > test2.txt 

for /f "tokens=*" %%a in ('type test.txt') do (
    if "%%a"=="Update=Yes" (
     @echo Update=No >> test2.txt 
    ) else if "%%a"=="Update=No" (
     @echo Update=Yes >> test2.txt 
    ) else if "%%a"=="" (
     rem Questions TWO 
     rem print a blank line doesn't work 
     @echo. >> test2.txt 
    ) else (
     set tmpvar=%%a 
     set str=!tmpvar:%%=%%%%! 
     echo !str! >> test2.txt 
    ) 
) 

start test2.txt 

La sortie est test2.txt (Note No Line Blank dans Bonjour tout le monde)

Hello World 
The filename is : filename with spaces and 50%% percentages signs.txt 
The %%~nf removes extenstions 
Is there something to double a %% charactor? 
As I would like 50%% to be outputed as 50%%%% 
because the output of this batch is to create input for another batch. 

Problème deux: Comment puis-je vérifier si %% a est une ligne vide?

Cela fonctionne mais nécessiterait 400 lignes; Y at-il un moyen de le faire en utilisant un For LOOP?

@echo off 

set STR2=ON%%E 

echo This is STR2 %STR2% 

IF "%STR2:~0,1%"=="%%" (set STR3=%STR3%%%%%) else set STR3=%STR3%%STR2:~0,1% 

IF "%STR2:~1,1%"=="%%" (set STR3=%STR3%%%%%) else set STR3=%STR3%%STR2:~1,1% 

IF "%STR2:~2,1%"=="%%" (set STR3=%STR3%%%%%) else set STR3=%STR3%%STR2:~2,1% 

IF "%STR2:~3,1%"=="%%" (set STR3=%STR3%%%%%) else set STR3=%STR3%%STR2:~3,1% 

echo This is STR3 %STR3% 

pause 

Répondre

3

Pour répondre à vos questions:

1) Dans un script de base qui est probablement la meilleure façon de faire un échange de chaîne.

2) "/ n" ne correspond pas à une ligne vide. Une ligne vide sera juste "".

3) "tokens = *" place la ligne entière dans la variable %% a, donc echo %%a est le meilleur moyen d'écho de toute la ligne.

4) Vous aurez besoin d'utiliser une autre variable pour faire le% doubler comme ceci:

) else (
    set tmpvar=%%a 
    set str=!tmpvar:%%=%%%%! 
    echo !str! 
) 
+0

Pouvez-vous mettre à jour votre question avec un échantillon de votre fichier source et ce que vous obtenez maintenant? –

+1

Ajouter une ligne après @echo off qui indique "SETLOCAL ENABLEDELAYEDEXPANSION" (sans les guillemets). –

+0

Je suis assez sûr que XP a cela. Vous pouvez vous assurer en tapant "cmd /?" (sans les guillemets) sur la ligne de commande. L'aide devrait mentionner l'expansion retardée. –