2010-09-15 2 views
0

Есть ли что-то в файле BATCH, которое удваивает символ%?Есть ли что-то удвоить выход символа%?

test.txt входной файл содержит следующую

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. 

Пакетный файл.

@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 

Выход test2.txt является (Примечание незаполненной строки под Hello World)

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. 

Проблемы второй: Как я могу проверить, если %% а есть пустая строка?

Это действительно работает, но потребует 400 строк; есть ли способ сделать это, используя 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 

ответ

3

Чтобы ответить на ваши вопросы:

1) В базовом сценарии, который, вероятно, самый простой способ сделать строку подкачки.

2) «/ n» не будет соответствовать пустой строке. Пустая строка будет просто «».

3) «tokens = *» помещает всю строку в переменную %% a, поэтому echo %%a - лучший способ просто отозвать всю строку.

4) Вы должны будете использовать другую переменную сделать% удвоения, как это:

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

Вы можете обновить свой вопрос с образцом вашего исходного файла и что вы получаете сейчас? –

+1

Добавьте строку после @echo, которая говорит «SETLOCAL ENABLEDELAYEDEXPANSION» (без кавычек). –

+0

Я уверен, что у XP есть это. Вы можете убедиться, набрав «cmd /?» (без кавычек) в командной строке. В помощи должно быть указано замедленное расширение. –