Windows 배치 파일의 숨겨진 기능입니다.
Windows 배치 파일의 중요하면서도 유용한 기능은 무엇입니까?
가이드라인은 다음과 같습니다.
- 답변당 하나의 기능이 있습니다.
- 설명서에 대한 링크뿐만 아니라 기능에 대한 간단한 설명과 예를 모두 제공합니다.
- 답변을 기본 기능으로 제한합니다. 즉, Windows 리소스 키트와 같은 추가 소프트웨어가 필요하지 않습니다.
설명:여기서는 cmd.exe에서 처리되는 스크립트를 참조합니다. 이 스크립트는 WinNT 변형에서 기본입니다.
다음을 참조하십시오.윈도우즈 배치 파일: .bat vs .cmd?
줄을 계속합니다.
call C:\WINDOWS\system32\ntbackup.exe ^
backup ^
/V:yes ^
/R:no ^
/RS:no ^
/HC:off ^
/M normal ^
/L:s ^
@daily.bks ^
/F daily.bkf
PUSHD path
경로별로 지정된 디렉터리로 이동합니다.
POPD
"밀어서" 보낸 디렉토리로 돌아갑니다.
배치 파일에서 이 명령어가 얼마나 유용한지는 모르겠지만 명령 프롬프트에서 사용할 수 있는 매우 편리한 명령입니다.
C:\some_directory> start .
그러면 "some_directory" 폴더에서 Windows 탐색기가 열립니다.
저는 이것이 시간을 절약해 줄 수 있다는 것을.
각 줄에 키워드로 표시된 코멘트를 읽는 것은 항상 어렵습니다.
REM blah blah blah
읽기 쉽습니다.
:: blah blah blah
가변 하위 문자열:
> set str=0123456789
> echo %str:~0,5%
01234
> echo %str:~-5,5%
56789
> echo %str:~3,-3%
3456
FOR 명령입니다!저는 배치 파일 쓰는 것을 싫어하지만, 감사하게 생각합니다.
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
myfile의 각 행을 구문 분석합니다.txt, 세미콜론으로 시작하는 행을 무시하고 각 줄에서 두 번째 및 세 번째 토큰을 쉼표 및/또는 공백으로 구분하여 본문으로 전달합니다.두 번째 토큰을 얻으려면 %i를 참조하고 세 번째 토큰을 얻으려면 %j를, 세 번째 토큰을 얻으려면 %k를 참조합니다.
또한 디렉토리, 디렉토리 내용 등에 대해 반복할 수도 있습니다.
REM 또는 :: 행으로 스크립트를 어지럽히는 대신 각 스크립트의 맨 위에서 다음을 수행합니다.
@echo OFF
goto :START
Description of the script.
Usage:
myscript -parm1|parm2 > result.txt
:START
파이프 및 리디렉션 문자를 이스케이프하지 않고 사용할 수 있는 방법을 확인하십시오.
스크립트가 ~dp0인 경로(드라이브 포함)입니다.
set BAT_HOME=%~dp0
echo %BAT_HOME%
cd %BAT_HOME%
%~dp0 부분은 이미 언급되었지만, 추출된 정보를 정의하는 ~ 뒤에 있는 문자가 더 있습니다.
패치 파일 이름이 반환되는 가 없습니다.
드라이브 문자d를 반환합니다.
- pathp - 로로니다 the니다 the 오다를 반환합니다.
s - 짧은 경로를 반환합니다.
- 파일 확장자 x - the -확를 the the the the the the the the the를 반환합니다.
따라서 아래 스크립트 test.bat을 c: 에에 c 에 test.bat에서 실행하면 test.bat이 실행됩니다.\Temp\long dir name\을(를) 선택합니다.
@echo off
echo %0
echo %~d0
echo %~p0
echo %~dp0
echo %~x0
echo %~s0
echo %~sp0
다음과 같은 출력을 얻을 수 있습니다.
test c: \Temp\long dir name\ c:\Temp\long dir name\ .bat c:\Temp\LONGDI~1\test.bat \Temp\LONGDI~1\
그리고 스크립트에 매개 변수가 전달되는 입니다.
test c:\disc\mysrc\test.cppsc:\disc\mysrc\test.cppsada를 합니다.
%1 변수에서도 동일한 조작을 수행할 수 있습니다.
하지만 %0의 확장 결과는 위치에 따라 다릅니다!
배치의 "최상위 수준"에서는 현재 배치 파일 이름으로 확장됩니다.
함수(호출)에서는 함수 이름으로 확장됩니다.
@echo off
echo %0
call :test
goto :eof
:test
echo %0
echo %~0
echo %~n0
출력은 다음과 같습니다(배치 파일은 myBatch.bat로 시작됩니다).
myBatch.bat
:test
:test
myBatch
CALL, EXIT /B, SETLOCAL 및 ENDLOCAL을 사용하여 로컬 변수가 있는 서브루틴을 구현할 수 있습니다.
예를 들어 다음과 같습니다.
@echo off
set x=xxxxx
call :sub 10
echo %x%
exit /b
:sub
setlocal
set /a x=%1 + 1
echo %x%
endlocal
exit /b
이렇게 인쇄합니다.
11
xxxxx
:sub가 x를 수정하는 경우에도 마찬가지입니다.
N초 동안 기다리는 교묘한 속임수(cmd.exe의 일부가 아니지만 Windows와 함께 제공되므로 추가 소프트웨어도 아님)는 ping 줄을 참조하십시오.첫 번째 ping이 지연 없이 전송되므로 N+1 ping이 필요합니다.
echo %time%
call :waitfor 5
echo %time%
goto :eof
:waitfor
setlocal
set /a "t = %1 + 1"
>nul ping 127.0.0.1 -n %t%
endlocal
goto :eof
"플럼핑"에서 벗어나야 합니다.
echo ^| ^< ^> ^& ^\ ^^
명령을 실행하고 출력을 처리할 수 있습니다(bash의 '$()' 백틱).
for /f %i in ('dir /on /b *.jpg') do echo --^> %i
파일 이름에 공백이 있으면 다음을 사용합니다.
for /f "tokens=*" %i in ('dir /on /b *.jpg') do echo --^> %i
빈 파일을 만드는 중입니다.
> copy nul filename.ext
명령에서 모든 출력을 숨기려면 >nul 2>&1로 리디렉션하십시오.
예를 들어 일부 명령줄 프로그램은 >nul로 리디렉션하더라도 출력을 표시합니다.그러나 아래 라인처럼 출력을 리디렉션하면 모든 출력이 억제됩니다.
PSKILL NOTEPAD >nul 2>&1
EDIT: 명령 출력 무시를 참조하십시오. 명령어 출력 무시를 참조하십시오.
PAUSE
실행을 중지하고 다음 메시지를 표시합니다.
계속하려면 아무 키나 누르십시오. .
Windows 탐색기에서 배치를 두 번 클릭하여 실행하고 명령 창의 플래시만 보는 것이 아니라 출력을 실제로 보려는 경우에 유용합니다.
bash(및 기타 셸)와 동일합니다.
echo -n Hello # or
echo Hello\\c
이렇게 해서 '이렇게 하다'를출력합니다.Hello
이렇게 '어느 정도'라고 합니다.이렇게 해서 cmd hack 을 사용합니다.
<nul set /p any-variable-name=Hello
set /p
사용자에게 입력을 요청하는 방법입니다.지정된 문자열을 내보낸 다음(즉, CRLF 없음) 사용자가 응답을 입력할 때까지 기다립니다.
<nul
는 단순히 빈 응답을 파이프로 연결합니다.set /p
따라서 최종 결과는 내보낸 프롬프트 문자열이 됩니다(빈 응답으로 인해 사용된 변수는 변경되지 않습니다).
문제는 다음과 같습니다.선행 등호를 출력할 수 없으며 Vista에서는 선행 공백 문자가 제거되지만 XP에서는 제거되지 않습니다.
환경 변수를 설정할 때 다음을 검색하고 바꿉니다.
> @set fname=%date:/=%
...타임스탬프가 찍힌 파일 이름에 사용할 날짜의 "/"를 지정합니다.
서브스트링도 마찬가지입니다...
> @set dayofweek=%fname:~0,3%
정수 산술:
> SET /A result=10/3 + 1
4
명령 구분 기호:
cls & dir
copy a b && echo Success
copy a b || echo Failure
두 번째 줄에서 & & 뒤의 명령은 첫 번째 명령이 성공한 경우에만 실행됩니다.
세 번째 줄에서 || 이후의 명령은 첫 번째 명령이 실패한 경우에만 실행됩니다.
빈 줄을 출력합니다.
echo.
짧은 순환 부울 'and'와 같은 효과를 얻기 위해 문을 체인으로 연결할 수 있습니다.
if foo if bar baz
유니코드 텍스트 파일(16비트/char)을 ASCII DOS 파일(8비트/char)로 빠르게 변환합니다.
C:\> type unicodeencoded.txt > dosencoded.txt
가능한 경우 캐릭터가 올바르게 매핑됩니다.
블록 구조가 다음과 같은 경우:
if "%VS90COMNTOOLS%"=="" (
echo: Visual Studio 2008 is not installed
exit /b
)
변수의 확장이 지연됩니다(적절한 측정을 위해 하위 문자열이 삽입됨).
@echo off
setlocal enableextensions enabledelayedexpansion
set full=/u01/users/pax
:loop1
if not "!full:~-1!" == "/" (
set full2=!full:~-1!!full2!
set full=!full:~,-1!
goto :loop1
)
echo !full!
endlocal
많은 기능을 제공하지는 않지만, title 명령을 사용하여 작업 표시줄의 긴 스크립트에 상태를 제공하거나 사용자 피드백을 향상시킬 수 있습니다.
@title Searching for ...
:: processing search
@title preparing search results
:: data processing
편집기가 없어서 배치 파일을 생성해야 합니까?
copy con test.bat
명령을 입력하고 새 줄을 보려면 Enter 키를 누르십시오.Ctrl+Z를 누르고 Enter 키를 눌러 파일을 닫습니다.
문자열 감산 예제입니다.date
그리고.time
"YYY-MM-DD HH" 파일을 얻으려면 다음과 같이 하십시오.MM:SS.txt"를 클릭합니다.
echo test > "%date:~0,4%-%date:~5,2%-%date:~8,2% %time:~0,2%_%time:~3,2%_%time:~6,2%.txt"
사용합니다.color
텍스트 및 배경 색상을 변경하여 스크립트가 성공, 실패 또는 입력이 필요한지 여부를 나타냅니다.시야에 머신이 닿을 수 있지만 꽤 멀리 떨어져 있을 때 매우 유용합니다.
XY를 색칠합니다.
여기서 X와 Y는 16진수 값입니다.0
로.F
여기서 X - background, Y - text는 X = Y 색상이 변경되지 않습니다.
Z를 색칠합니다.
텍스트 색상을 'Z'로 변경하고 배경을 검은색으로 설정합니다. 'color 0'은 작동하지 않습니다.
색상 이름을 알고 싶으면 전화하세요.
색상은요?
공백 및 이스케이프 문자를 사용하여 출력을 완전히 제어합니다.
echo. ^<resourceDir^>/%basedir%/resources^</resourceDir^>
SoftwareJedi에서 for 명령을 이미 언급했지만, 매우 강력하기 때문에 다시 언급하겠습니다.
다음은 현재 날짜를 YYYYMMDD 형식으로 출력한 것입니다. 백업용 디렉토리를 생성할 때 사용합니다.
for /f "tokens=2-4 delims=/- " %a in ('DATE/T') do echo %c%b%a
언급URL : https://stackoverflow.com/questions/245395/hidden-features-of-windows-batch-files 입니다.
'source' 카테고리의 다른 글
Excel 워크시트에서 sql 삽입 스크립트를 생성합니다. (0) | 2023.04.25 |
---|---|
Exists 1 또는 Exists*를 사용하는 하위 쿼리입니다. (0) | 2023.04.25 |
ADO와 DAO의 차이입니다. (0) | 2023.04.25 |
C#의 목록에서 중복 항목을 제거합니다. (0) | 2023.04.25 |
zsh를 종료하지만 실행 중인 작업을 열어두시겠습니까? (0) | 2023.04.25 |