Programing

배치 파일에서 변수로 파일 내용을 읽는 방법은 무엇입니까?

crosscheck 2020. 6. 20. 10:30
반응형

배치 파일에서 변수로 파일 내용을 읽는 방법은 무엇입니까?


이 배치 파일은 TEST에서 LIVE로 빌드를 릴리스합니다. 이 파일에 특정 폴더에 수반되는 릴리스 문서가 있는지 확인하는 검사 제한 조건을 추가하고 싶습니다.

"C:\Program Files\Windows Resource Kits\Tools\robocopy.exe" "\\testserver\testapp$"        
"\\liveserver\liveapp$" *.* /E /XA:H /PURGE /XO /XD ".svn" /NDL /NC /NS /NP
del "\\liveserver\liveapp$\web.config"
ren "\\liveserver\liveapp$\web.live.config" web.config

그래서 이것을 달성하는 방법에 대한 몇 가지 질문이 있습니다 ...

  1. 거기에있다 version.txt에서 파일 \\testserver\testapp$폴더,이 파일의 유일한 내용은 빌드 번호를 (예를 들어, 45 - 빌드 45) 어떻게의 내용을 읽습니까 version.txt배치 파일에서 변수로 파일을?

  2. \\fileserver\myapp\releasedocs\ {build}.doc{build} 대신에 파트 1의 변수를 사용하여 파일 이 존재 하는지 어떻게 확인 합니까?


파일 내용을 변수로 읽습니다.

for /f "delims=" %%x in (version.txt) do set Build=%%x

또는

set /p Build=<version.txt

둘 다 파일에서 한 줄로만 작동합니다. 더 많은 줄의 경우 for변형은 마지막 줄을 변수에 넣고 줄을 set /p사용합니다 .

다른 환경 변수와 마찬가지로 변수를 사용하는 것은 결국 하나입니다.

%Build%

따라서 존재를 확인하려면 :

if exist \\fileserver\myapp\releasedocs\%Build%.doc ...

UNC 경로가 허용되지 않을 수도 있습니다. 지금 이것을 테스트 할 수는 없지만 이것을 명심하십시오.


다음과 같이 파일에서 여러 변수를 읽을 수 있습니다.

for /f "delims== tokens=1,2" %%G in (param.txt) do set %%G=%%H

param.txt :

PARAM1=value1
PARAM2=value2
...

그냥 해:

type version.txt

입력 한 것처럼 표시됩니다.

set /p Build=<version.txt
echo %Build%

파일의 모든 행을 변수에로드하려면 지연 확장이 필요하므로 다음을 수행하십시오.

SETLOCAL EnableDelayedExpansion

for /f "Tokens=* Delims=" %%x in (version.txt) do set Build=!Build!%%x

이 일부 특수 문자에 문제가있다, 특히하지만 ;, %!

참고 URL : https://stackoverflow.com/questions/3068929/how-to-read-file-contents-into-a-variable-in-a-batch-file

반응형