2016-08-22 2 views
0

이름이 "12739-5468768.xml"인 파일이 많습니다. 공통점은 "12739"이며 모든 파일을 &을 "AND"로 바꾸고 싶습니다. </을 입력하지 않았습니다. 나는 많은 명령과 파이썬 명령을 시도했지만 내 컴퓨터에서 작동하지 않는 것 같습니다.문자열을 배치 파일 명령으로 바꾸기

+0

와 박쥐를하고 실패 어디에 그냥도 말해 배치의 폴더에 포함, 아무것도 표시되지 않습니다. – jasmine825

+1

FOR :/F가 와일드 카드를 허용하지 않기 때문에'the file "12739 *"를 찾을 수 없습니다. "오류가 발생합니다. – jeb

답변

0

다운로드 뭔가 후 다음이 코드

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

^문자를 사용하여 & 앰퍼샌드를 이스케이프 처리해야합니다. 하나의 파일
에 대한

@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 ="% file % "에서'the file"12739 * "를 찾을 수 없습니다." – jeb

1

솔루션이 또한 !^, 빈 라인과 파일 내용에 ;로 시작하는 라인을 처리합니다. "방귀" 라는

@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

아니요. 작동하지 않습니다. – jasmine825

+0

google [for-loop를 사용하여 디렉토리의 모든 파일 반복] (http : // stackoverflow .com/q/138497/463115) – jeb

관련 문제