IT

배치 파일 내에서 출력 리디렉션

lottoking 2020. 8. 21. 08:04
반응형

배치 파일 내에서 출력 리디렉션


시스템에서 정보를 수집하는 몇 가지 간단한 명령으로 배치 파일을 만들고 있습니다. 배치 파일에는 시간, IP 정보, 사용자 등을 가져오고 있습니다.

모든 명령을 배치 파일에 모아서 실행하지만 배치 파일을 실행하여 결과를 텍스트 파일 (로그)로 출력하고 싶습니다. 그렇게하는 배치에 추가 할 수있는 명령이 있습니까?

cmd에서 일괄 처리를 실행하지 않고 출력을 리디렉션하고 싶지 않습니다. 가능한 경우 배치 내부에서 출력을 리디렉션하고 싶습니다.


파일 포인터를 EndOf-File에 여러 번-배치하기 때문에 느린 단순 순진한 방법입니다.

@echo off
command1 >output.txt
command2 >>output.txt
...
commandN >>output.txt

더 나은 방법-파일이 한 번만 열리고 위치가 지정 또는 쓰기가 약간 빠입니다.

@echo off
>output.txt (
  command1
  command2
  ...
  commandN
)

번만 배치 파일하는 방법을 다른 방법으로

@echo off
call :sub >output.txt
exit /b

:sub
command1
command2
...
commandN

출력 및 오류 스트림을 모두 리디렉션 비용

dir >> a.txt 2>&1

나는 안건 오래된 게시물이라는 것을 알고있다 누군가가 Google 검색에서 우연히 발견 할 수있는 OP가 의견에서 요청한 몇 가지 질문이 예시로 요청한 것처럼 보입니다. 또한 이것이 저의 첫 번째 제안 저에게 쉽게 가십시오. :)

동적으로 생성 된 파일 이름을 사용하여 출력을 파일로 리디렉션하기 위해 이동 (읽기 : 퀵 앤 더티) 접근 방식은 @dbenham에서 제공하는 두 번째 솔루션입니다. 예를 들면 다음과 같습니다.

@echo off
> filename_prefix-%DATE:~-4%-%DATE:~4,2%-%DATE:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log (
echo Your Name Here
echo Beginning Date/Time: %DATE:~-4%-%DATE:~4,2%-%DATE:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log
REM do some stuff here
echo Your Name Here
echo Ending Date/Time: %DATE:~-4%-%DATE:~4,2%-%DATE:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log
)

대상 디렉터리에있는 파일 의이 스크린 샷 에서 볼 수있는 것과 같은 파일을 생성합니다.

여기에 다음 출력이 포함됩니다.

Your Name Here
Beginning Date/Time: 2016-09-16_141048.log
Your Name Here
Ending Date/Time: 2016-09-16_141048.log

또한이 솔루션은 로케일에 따라 다르거 나 사용 방법 /시기에주의하십시오.


@echo off
>output.txt (
echo Checking your system infor, Please wating...

systeminfo | findstr /c:"Host Name" 
systeminfo | findstr /c:"Domain"

ipconfig /all | find "Physical Address" 

ipconfig | find "IPv4" 
ipconfig | find "Default Gateway"

)

@pause

echo some output >"your logfile"

또는

(
 echo some output
 echo more output
)>"Your logfile"

청구서를 작성해야합니다.

당신이 원하는 경우 APPEND출력, 사용 >>대신에 >. >새 로그 파일을 시작합니다.


출력을 파일과 콘솔로 리디렉션하는 데 사용할 수있는 멋진 작은 프로그램이 있습니다.

some_command  ^|  TEE.BAT  [ -a ]  filename 

@ECHO OFF
:: Check Windows version
IF NOT "%OS%"=="Windows_NT" GOTO Syntax

:: Keep variables local
SETLOCAL

:: Check command line arguments
SET Append=0
IF /I [%1]==[-a] (
	SET Append=1
	SHIFT
)
IF     [%1]==[] GOTO Syntax
IF NOT [%2]==[] GOTO Syntax

:: Test for invalid wildcards
SET Counter=0
FOR /F %%A IN ('DIR /A /B %1 2^>NUL') DO CALL :Count "%%~fA"
IF %Counter% GTR 1 (
	SET Counter=
	GOTO Syntax
)

:: A valid filename seems to have been specified
SET File=%1

:: Check if a directory with the specified name exists
DIR /AD %File% >NUL 2>NUL
IF NOT ERRORLEVEL 1 (
	SET File=
	GOTO Syntax
)

:: Specify /Y switch for Windows 2000 / XP COPY command
SET Y=
VER | FIND "Windows NT" > NUL
IF ERRORLEVEL 1 SET Y=/Y

:: Flush existing file or create new one if -a wasn't specified
IF %Append%==0 (COPY %Y% NUL %File% > NUL 2>&1)

:: Actual TEE
FOR /F "tokens=1* delims=]" %%A IN ('FIND /N /V ""') DO (
	>  CON    ECHO.%%B
	>> %File% ECHO.%%B
)

:: Done
ENDLOCAL
GOTO:EOF

:Count
SET /A Counter += 1
SET File=%1
GOTO:EOF

:Syntax
ECHO.
ECHO Tee.bat,  Version 2.11a for Windows NT 4 / 2000 / XP
ECHO Display text on screen and redirect it to a file simultaneously
ECHO.
IF NOT "%OS%"=="Windows_NT" ECHO Usage:  some_command  ³  TEE.BAT  [ -a ]  filename
IF NOT "%OS%"=="Windows_NT" GOTO Skip
ECHO Usage:  some_command  ^|  TEE.BAT  [ -a ]  filename
:Skip
ECHO.
ECHO Where:  "some_command" is the command whose output should be redirected
ECHO         "filename"     is the file the output should be redirected to
ECHO         -a             appends the output of the command to the file,
ECHO                        rather than overwriting the file
ECHO.
ECHO Written by Rob van der Woude
ECHO http://www.robvanderwoude.com
ECHO Modified by Kees Couprie
ECHO http://kees.couprie.org
ECHO and Andrew Cameron


@echo OFF
[your command] >> [Your log file name].txt

위의 명령을 배치 파일에서 사용했는데 작동합니다. 로그 파일에 내 명령의 결과가 표시됩니다.


배치 파일 상단 근처에 다음 두 줄을 추가하면 모든 stdout 및 stderr이 log.txt로 리디렉션됩니다.

if not "%1"=="STDOUT_TO_FILE"  %0 STDOUT_TO_FILE %*  >log.txt 2>&1
shift /1

입력에 "독성"문자가있는 경우 실패 할 수 있습니다. thisIsAnIn ^^^^ put과 같은 입력을 고려하면 무슨 일이 일어나고 있는지 이해하는 좋은 방법입니다. 물론 입력 문자열이 반드시 큰 따옴표 안에 있어야한다는 규칙이 있지만 입력의 의미가 NTFS 파티션의 위치 인 경우에만이 규칙이 유효한 규칙이라는 느낌이 있습니다 (아마도 URL에 대한 규칙 일 수 있음). 확실하지 않음). 그러나 이것은 물론 임의의 입력 문자열에 대한 규칙은 아닙니다 ( "좋은 방법"이지만 셀 수는 없습니다).

참고 URL : https://stackoverflow.com/questions/20484151/redirecting-output-from-within-batch-file

반응형