2010-07-15 2 views
0

Я создаю пакетный файл для обработки файла входных записей. Я вырезал большую часть кода, так что вот проблема. Когда он читает 3-ю запись, с амперсандом, задание не записывает выходную запись, UNLESS я помещаю двойные кавычки вокруг переменной %%H. Однако, когда я это делаю, он добавляет " к первому и последнему байтам записи. Я хочу в основном копировать запись, и я тоже занимаюсь другой обработкой.Проблема пакетного файла с амперсандом и во входной записи

Есть ли способ, чтобы либо лишить "спереди и сзади, что в настоящее время добавленных, или есть способ для ECHO, чтобы справиться с амперсандом благодаря

Файл ввода имеет три записи:?!

HOW NOW BROWN COW 
JACK AND JILL 
JUST YOU & ME 

Сценарий выглядит следующим образом:.

set infile=D:\file.txt 
set outfile=D:\outfile.txt 

for /F "tokens=*" %%H in (%infile%) do (CALL :Loop "%%H") 

rem for /F "tokens=*" %%H in (%infile%) do (CALL :Loop %%H) 

GOTO :Loop_Exit 

:Loop 
    echo %* >> %outfile% 
:Loop_Exit 
pause 
+0

@ricchaudoir: Фокус заключается в следующем: использовать кавычки вокруг переменной " %% H "в первую очередь. Затем, как только они вам больше не понадобятся, используйте %% ~ H. Это позволит обрезать кавычки (если они будут присутствовать) и ничего не сделает (при отсутствии кавычек). – 2010-08-15 09:32:04

+0

Да, вы можете разбить кавычки с использованием символа тильды. если «echo% VAR%» возвращает «значение», тогда «echo% ~ VAR%» должно возвращать значение без кавычек. См. Справку, набрав 'cmd.exe /?'. – djangofan

ответ

0

Вы можете использовать variable substring operators, чтобы обрезать первые и последние символы, кавычки

Таким образом, если VAR="Quoted String", то команда echo %VAR:~1,-1% не покажет кавычки.

+0

Я пробовал это и не мог заставить его работать в контексте цикла FOR. Процесс по-прежнему не работает, когда я заменяю однострочное эхо с помощью SET VAR =% *, затем echo% VAR: ~ 1, -1% >>% outfile%. – TheRic

+0

Вы передаете несколько элементов ('% *')? Если нет, '% 1' является первым переданным элементом:' Loop :; SET ITEM =% 1; ECHO% ITEM: ~ 1, -1% ' – ewall

+0

Чтобы просто сократить кавычки из'% H', вы можете использовать '% ~ H' (который ничего не сделает, если не будет никаких кавычек). – 2010-08-15 09:33:00

0

Здесь вы идете, это делает трюк через% ~ оператор, чтобы удалить кавычки:

@echo off 

set infile=e:\file.txt 
set outfile=e:\outfile.txt 

for /F "tokens=*" %%H in (%infile%) do (
    call :Loop "%%H" 
) 

exit /b 0 

:Loop 
    for %%a in (%*) do echo %%~a >> %outfile% 
exit /b 0 

ВЫХОДА:

E:\>foo2 

E:\>type outfile.txt 
HOW NOW BROWN COW 
JACK AND JILL 
JUST YOU & ME 
Смежные вопросы