2016-08-22 2 views
0

У меня есть много файлов с именем «12739-5468768.xml», что у них общего есть «12739», внутри этих файлов я хочу заменить каждый & на «И» и каждый </ ни с чем. Я пробовал много команд и команду python, но он, похоже, не работает на моем компьютере.Замена строк командой командного файла

@echo off 
setlocal 
setlocal enabledelayedexpansion 
set "search=&" 
set "replace= AND " 
set "textfile=12739*" 
set "newfile=Output.txt" 
(
    for /f "delims=" %%i in (%textfile%) do ( 
    set "line=%%i" 
    set "line=!line:%search%=%replace%!" 
    echo(!line! 
) 
) > "%newfile%" 
del %textfile% 
rename %newfile% %textfile% 
endlocal 
+0

И это просто даже сказать мне, где он выходит из строя, ничего не появляется. – jasmine825

+1

Я получаю ошибку «файл» 12739 * «не может быть найден», потому что FOR/F не принимает подстановочные знаки – jeb

ответ

0

Скачать что-то называется «ФАРТ» затем включить его в папку партии затем сделать биту с этим кодом

"@echo off 
FART -i -r "12739*" "&" " AND " " 
0

Вы должны избежать & Амперсанд & amp; используя символ ^.

@echo off 
setlocal 
setlocal enabledelayedexpansion 
set "search=^&" 
set "replace= AND " 
set "textfile=12739*" 
set "newfile=Output.txt" 
(
    for /f "delims=" %%i in (%textfile%) do ( 
    set "line=%%i" 
    set "line=!line:%search%=%replace%!" 
    echo(!line! 
) 
) > "%newfile%" 
del %textfile% 
rename %newfile% %textfile% 
endlocal 
+1

Приятная идея, но это неправильно. Поскольку выражение поиска всегда внутри кавычек, оно не должно быть экранировано – jeb

+0

Я пробовал его внутри строки и избегал его с помощью^работал для меня ... – GoodJuJu

+1

Как сказано, он не может работать. Btw ваш код остановится на 'for/f 'delims =" %% i in (% textfile%) 'с ошибкой' файл 12739 * "не может быть найден – jeb

1

Solution для одного файла
Это обрабатывает также !^, пустые строки и строки, начинающиеся с ; в содержимом файл.

@echo off 
setlocal 

call :replaceFile "12739-5468768.xml" 
exit /b 

:replaceFile 
set "search=&" 
set "replace= AND " 
set "textfile=%~1" 
set "newfile=%~1.replaced" 
setlocal DisableDelayedExpansion 
(
    for /f "usebackq delims=" %%i in (`findstr /N "^" "%textfile%"`) do ( 
    set "line=%%i" 
    setlocal EnableDelayedExpansion 
    set "line=!line:*:=!" 
    if defined line (
     set "line=!line:%search%=%replace%!" 
     set "line=!line:</=!" 
    ) 
    (echo(!line!) 
    endlocal 
) 
) > "%newfile%" 
endlocal 
exit /b 
+0

делает это для более чем одного файла, я хочу иметь возможность делать 12739 * – jasmine825

+0

nope это не сработало – jasmine825

+0

Просто найдено с google [Итерировать все файлы в каталоге, используя for-loop] (http: // stackoverflow .com/q/138497/463115) – jeb

Смежные вопросы