Program Club

특수 문자와 함께 일괄 에코 사용

proclub 2020. 11. 29. 12:32
반응형

특수 문자와 함께 일괄 에코 사용


이것은 정말 쉬울 지 모르지만 인터넷을 통해 답이 없었습니다. 일괄 처리를 통해 XML 줄을 파일에 에코하고 싶지만 리디렉션에 대한 XML 닫는 태그 ">"를 잘못 이해합니다. 라인은 다음과 같습니다.

echo <?xml version="1.0" encoding="utf-8" ?> > myfile.xml

특수 문자열을 해석하지 않도록 배치 파서에 힌트를 제공하는 방법이 있습니까? 큰 따옴표를 사용했지만 파일에도 씁니다! 파일은 echo 후 다음과 같아야합니다.

<?xml version="1.0" encoding="utf-8" ?>

다음을 사용하여 쉘 메타 문자를 이스케이프 할 수 있습니다 ^.

echo ^<?xml version="1.0" encoding="utf-8" ?^> > myfile.xml

이후 참고 echo인 쉘 내장 그렇게 단지 그들을 제거하는 따옴표 대신 인수가 출력을 인용, 인용에 관한 일반적인 규칙을 따르지 않습니다.


에코가있는 Windows에서 '>'와 같은 특수 문자를 사용하려면 그 앞에 특수 이스케이프 문자를 배치해야합니다.

예를 들어

echo A->B

'>'는 '^'로 이스케이프해야하므로 작동하지 않습니다.

 echo A-^>B

이스케이프 시퀀스를 참조하십시오 .여기에 이미지 설명 입력

기본 특수 문자 세트와 해당 이스케이프 시퀀스를 인쇄하는 짧은 배치 파일이 있습니다.


다른 방법 :

@echo off

for /f "useback delims=" %%_ in (%0) do (
  if "%%_"=="___ATAD___" set $=
  if defined $ echo(%%_
  if "%%_"=="___DATA___" set $=1
)
pause
goto :eof

___DATA___
<?xml version="1.0" encoding="utf-8" ?>
 <root>
   <data id="1">
      hello world
   </data>
 </root>
___ATAD___


rem # 
rem # 

한 가지 쉬운 해결책은 지연된 확장을 사용하는 것입니다. 특수 문자는 변경되지 않습니다.

set "line=<?xml version="1.0" encoding="utf-8" ?>"
setlocal EnableDelayedExpansion
(
  echo !line!
) > myfile.xml

편집 : 또 다른 해결책은 사라지는 따옴표 를 사용하는 입니다.

이 기술은 따옴표를 사용하여 특수 문자를 인용합니다.

@echo off
setlocal EnableDelayedExpansion
set ""="
echo !"!<?xml version="1.0" encoding="utf-8" ?>

특수 문자 단계에서 선행 인용 부호가 !"!나머지 줄을 보존하므로 트릭이 작동 합니다 (다른 인용 부호가없는 경우).
그리고 지연된 확장 단계에서 !"!의지는 변수의 내용으로 대체됩니다 "(작은 따옴표는 법적 이름입니다!).

비활성화 된 지연 확장으로 작업하는 경우 FOR /F대신 루프를 사용할 수 있습니다 .

for /f %%^" in ("""") do echo(%%~" <?xml version="1.0" encoding="utf-8" ?>

그러나 약간 짜증나는 것처럼 보이므로 매크로를 만들 수도 있습니다.

set "print=for /f %%^" in ("""") do echo(%%~""

%print%<?xml version="1.0" encoding="utf-8" ?>
%print% Special characters like &|<>^ works now without escaping

>문자 를 출력하는 방법 ^이스케이프 문자 를 앞에 추가하는 것입니다 .

echo ^>

간단히 인쇄됩니다

>

Joey의 대답은 저에게 효과가 없었습니다. 실행 후

  echo ^<?xml version="1.0" encoding="utf-8" ?^> > myfile.xml

이 오류 bash : 예기치 않은 토큰 '>'근처 구문 오류가 있습니다.

이 솔루션은 저에게 효과적이었습니다.

 echo "<?xml version=\"1.0\" encoding=\"utf-8\">" > myfile.txt

참조 http://www.robvanderwoude.com/escapechars.php


작은 따옴표를 사용하지 않는 이유는 무엇입니까?

echo '<?xml version="1.0" encoding="utf-8" ?>'

산출

<?xml version="1.0" encoding="utf-8" ?>

참고 URL : https://stackoverflow.com/questions/7308586/using-batch-echo-with-special-characters

반응형