Windows 배치 파일의 숨겨진 기능


232

Windows 배치 파일의 덜 알려지지 만 중요하고 유용한 기능에는 어떤 것이 있습니까?

지침 :

  • 답변 당 하나의 기능
  • 문서에 대한 링크뿐만 아니라 기능에 대한 간단한 설명예제 를 제공하십시오.
  • 기본 기능에 대한 답변을 제한합니다 . 즉, Windows Resource Kit 와 같은 추가 소프트웨어가 필요하지 않습니다.

설명 : 여기에서는 WinNT 변형의 기본값 인 cmd.exe로 처리되는 스크립트를 참조합니다.

(또한 Windows 배치 파일 : .bat 및 .cmd? 참조 )

답변:


185

줄 연속 :

call C:\WINDOWS\system32\ntbackup.exe ^
    backup ^
    /V:yes ^
    /R:no ^
    /RS:no ^
    /HC:off ^
    /M normal ^
    /L:s ^
    @daily.bks ^
    /F daily.bkf

2
나는 지난주에 이것을 찾고 있었다! (캐릭터를 기억하지 못했습니다)
chilltemp

21
^는 실제로 인용 문자입니다. 이를 사용하면 <및>를 인용하여 출력을 리디렉션하지 않도록 할 수 있습니다. 줄 끝의 ^는 줄 연속을 허용합니다.
Cheeso

이 작은 스크립틀릿을 설명해 주시겠습니까?
guerda

2
@furtelwart : 이것은 한 줄에 모두 쓴 것과 같습니다 : call C:\WINDOWS\system32\ntbackup.exe backup /V:yes /R:no /RS:no /HC:off /M normal /L:s @daily.bks /F daily.bkf. 그리고 해당 라인의 모든 매개 변수를 이해하려면 간단히 실행하십시오 C:\WINDOWS\system32\ntbackup.exe /?.
커트 파이 플


150
PUSHD path

path로 지정된 디렉토리로 이동합니다 .

POPD

"밀어 넣은"디렉토리로 돌아갑니다.


5
이것은 전체 스택으로도 작동하므로 많은 디렉토리를 스택으로 푸시 한 다음 계속해서 튀어 나와서 원래 위치로 돌아갈 수 있습니다.
Kibbee

진심이야? 이 기능에 대해 들어 본 적이 없는가?!
Josh Hinman

4
'cmd.exe'를 실행 한 다음 'help'를 입력 한 다음 'help pushd'또는 'pushd /?'를 입력하십시오.
paxdiablo

86
UNC 경로로 푸시하면 드라이브가 자동으로 드라이브를 매핑하고 팝 드가 매핑을 해제합니다.
Ferruccio

2
특히 UNC 기능의 경우 +1로 답에 추가해야합니다.
Adam Mitz

109

배치 파일 에서 이것이 얼마나 유용한 지 잘 모르겠지만 명령 프롬프트에서 사용하는 것이 매우 편리한 명령입니다.

C:\some_directory> start .

"some_directory"폴더에 Windows 탐색기가 열립니다.

나는 이것이 시간을 절약 할 수 있다는 것을 알았습니다.


1
글쎄, 나도 사용한다. PATH 디렉토리 중 하나에 "open.cmd"파일이 있으며 해당 파일의 유일한 항목은 "@start"입니다. ;)
Paulius

5
'explorer'는 또한 'start'C : \ some_directory> explorer와 동일한 작업을 수행합니다.
Ray

1
나는 이것을 "start" "로 입력하는 경향이있다. ]는 제목이 첫 번째 매개 변수에 대해 시작이 때로는 까다롭기 때문에 명확성을 위해 대괄호입니다.
시스템 일시

1
Mac에있는 open .경우에도 마찬가지입니다.
Grant Paul

1
start현재 폴더를 여는 것 이상을 수행합니다. 파일을 전달하면 구성된 뷰어에서 파일을 열 수 있습니다. URL을 입력하면 기본 브라우저가 열립니다.
idbrii

87

나는 항상 각 줄에 키워드로 표시된 주석을 읽는 것이 어렵다는 것을 알았습니다.

REM blah blah blah

더 읽기 쉽다 :

:: blah blah blah

8
REM이 그 이후에 발생하는 것들에 대해 환경 변수 확장을 시도하기 때문에 ::가 REM보다 효율적이라고 들었습니다.
Scott Langham

47
실제로 ::는 재미있는 이름을 가진 레이블 일뿐입니다. 따라서 레이블이 허용되지 않으므로 블록 내에서 괄호 안에 사용하면 ::가 작동하지 않습니다. REM은 물론 작동합니다.
mihi 2009

그 그래도 참고 rem문서화 된 키워드 동안은 ::단지 구현 세부입니다. ::작동을 멈출 것 같지는 않지만 일반적으로 문서화되지 않은 행동에 의존하지 않는 것이 좋습니다.
Joey

goto :라벨로 건너 뛸 수도 있습니다 . :-)goto -)도 작동합니다.
Sven Marnach

79

가변 부분 문자열 :

> set str=0123456789
> echo %str:~0,5%
01234
> echo %str:~-5,5%
56789
> echo %str:~3,-3%
3456

3
못생긴,하지만 매우 유용합니다!
guerda

1
@furtelwart는 배치 모토가 될 수있는 것처럼 들립니다
rzrgenesys187

이것은 날짜 형식을 지정하는 데 유용합니다 (그러나 내가 찾은 문제는 Vista / 7과 xp가 DATE를 다르게 출력한다는 것입니다)
Daniel

불행히도, 이것은 for %a in ...환경 변수처럼 닫는 백분율 부호를 필요로하지 않기 때문에 FOR 루프 ( ) 의 로컬 변수와 결합 될 수 없습니다 . 먼저 지연된 확장을 사용하여 환경 변수에 할당 한 다음 하위 문자열을 추출해야합니다.
RolKau

날짜가있는 작업 (예 : 백업 파일 이름)을 수행하려는 경우 불가피합니다. Windows 명령 줄의 일반적인 추악함을 목격 한 후 Windows가 주로 포인트 앤 클릭 인 이유를 알 수 있습니다. 새로운 PowerShell이 ​​더 좋다고 말합니다.
Halil Özgür

72

FOR 명령 ! 배치 파일 작성을 싫어하지만 감사합니다.

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

세미콜론으로 시작하는 줄을 무시하고 myfile.txt의 각 줄을 구문 분석하고 쉼표 및 / 또는 공백으로 구분 된 토큰을 사용하여 각 줄에서 for 본문으로 두 번째 및 세 번째 토큰을 전달합니다. for body 문 참조 % i는 두 번째 토큰을 가져오고 % j는 세 번째 토큰을 가져오고 % k는 세 번째 이후의 나머지 토큰을 가져옵니다.

이것을 사용하여 디렉토리, 디렉토리 내용 등을 반복 할 수 있습니다 ...


4
배치 파일의 FOR 루프가 제한적이고 작성하기가 끔찍한 것을 발견했지만 때로는 유용합니다.
ya23

2
실례합니다 실례지만, 지구상에서 어떻게 활용되고 있습니까? FOR 루프를 모른다면 배치 스크립팅을 모른다고 생각합니다.
스타일로 코딩하기

11
불충분 한 것은 고문이다. (어떤 사람들은 필요한 악을 주장 할 것입니다.)
harpo

나는 그것을 몇 번 사용해야 했고이 구문을 만든 사람은 해고되어야합니다. 대포에서. 태양의 안으로. 나쁘다.
VitalyB

1
@CodingWithStyle : 배치 파일에 for 루프를 작성해야 할 때마다 스크립트는 bash 실행기가되고 대신 bash (또는 python)로 스크립트를 다시 작성합니다.)
idbrii

60

REM 또는 :: 줄로 스크립트를 버리기보다는 각 스크립트의 맨 위에서 다음을 수행합니다.

@echo OFF
goto :START

Description of the script.

Usage:
   myscript -parm1|parm2 > result.txt

:START

파이프 및 리디렉션 문자를 이스케이프하지 않고 사용하는 방법에 유의하십시오.


3
"/?"에 대해 % 1을 (를) 확인하면 훨씬 더 시원 할 것입니다. 그런 다음 해당 섹션을 도움말 텍스트로 에코 할 수 있습니다.
demoncodemonkey 2018 년

6
흠, 문해력 일괄 프로그래밍?!
Muhammad Alkarouri

54

스크립트가있는 경로 (드라이브 포함) : ~ dp0

set BAT_HOME=%~dp0
echo %BAT_HOME%
cd %BAT_HOME%

나는 보통 이것을 위해 % CD %를 사용합니다. 모든 DOS 쉘 버전에서 사용 가능하지 않을 수 있습니까?
Saul Dolgin

11
% CD %는 현재 디렉토리이고 % ~ dp0은 실행중인 스크립트가있는 디렉토리입니다.
RealHowTo

또한 % CD %가 XP 이전에 존재하지 않았다고 생각합니다. 일부 이전 버전의 Windows에는 Windows가 없습니다.
Thomas Owens

1
박쥐가 다른 드라이브에있는 경우 대신 cd / d % BAT_HOME %을 사용해야합니다. 내가 올바르게 기억한다면, 이것은 오래된 DOS에서는 작동하지 않습니다.
ketorin

네트워크 경로에서 배치를 실행하면 cd 또는 push 된 % BATH_HOME %이 작동하지 않습니다.
Benoit

49

% ~ dp0 조각은 이미 언급되었지만 실제로 더 있습니다. ~ 뒤에 나오는 문자는 추출되는 정보를 정의합니다.
패치 파일 이름을 반환하는 문자 없음 결과
d-드라이브 문자
p를 반환합니다
.- 경로 s를 반환합니다.-짧은 경로를
반환합니다. x-파일 확장자를 반환합니다
. c : \ Temp에서 아래 test.bat 스크립트를 실행하면 \ 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\


테스트 c : \ temp \ mysrc \ test.cpp
에서와 같이 매개 변수가 스크립트에 전달 되면 % 1 변수를 사용하여 동일한 조작을 수행 할 수 있습니다.

그러나 % 0의 확장 결과는 위치에 따라 다릅니다!
배치의 "최상위 수준"에서는 현재 배치 파일 이름으로 확장됩니다.
함수 (호출)에서는 함수 이름으로 확장됩니다.

@echo off
echo %0
call :test
goto :eof

:test
echo %0
echo %~0
echo %~n0

출력은 배치 파일이 myBatch.bat로 시작됩니다.

myBatch.bat
:test
:test
myBatch

43

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를 수정합니다.


6
exit / b 대신 goto : eof를 사용해야하며 동일한 작업을 수행하지만보다 표준적인 방법입니다.
Philibert Perusse

2
이것에 대한 표준이 있습니까? O_o
Paulius

3
내 실수. 나는 당신이 명시 적으로 : eof 레이블을 정의하고 그것을 향한 것을 의미한다고 생각했습니다. 모든 배치 파일 끝에 암시 적 : eof 레이블이 있다는 것을 알지 못했습니다.
Ferruccio

3
그러나 서브 루틴이 오류 레벨을 설정하도록하려면 exit / b를 사용해야합니다. 예 : exit / b 3
Chris Noe

6
서브 루틴에서 리턴하기 위해 "goto : eof"대신 "exit / B"를 사용하는 것이 가장 좋습니다. "goto : eof"는 오류 코드를 삼킬 때 오류 코드를 리턴 할 수있는 문제가 있습니다. 예를 들어 "만약 someFile echo 존재하는 경우"를 사용하는 경우 someFile이 존재하지 않는 경우 오류 수준을 설정하지만 잘못된 것은 아니며 반환하려는 오류 코드가 아닙니다 ( " goto : eof ")
Scott Langham

42

N 초 동안 대기하는 비열한 트릭 (cmd.exe의 일부는 아니지만 Windows와 함께 제공되므로 추가 소프트웨어는 아님), 핑 라인을 참조하십시오. 첫 번째 핑이 지연없이 나가기 때문에 N + 1 핑이 필요합니다.

    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

2
더 좋은 방법은 sleep.bat와 같은 파일에 파일을 넣어서 다시 쓰는 문제를 저장하는 것입니다.
erjiang

1
... 그리고 PATH 환경 변수의 일부 디렉토리에 sleep.bat를 넣습니다
Scoregraphic

나는 이것을 외부에 두는 것에 반대하고, Windows 시스템 전반에서 이식성이 떨어집니다.
sorin

37

"배관"탈출 :

echo ^| ^< ^> ^& ^\ ^^

3
DOS 이스케이프 문자는 잘 알려져 있지 않습니다. 좋아요
Joshua

12
아, 그것은 왜 그것이 줄 연속 연산자인지 설명 할 것입니다
-bash

@leander : 그렇습니다. 그러나 모든 CR이 제거되기 때문에 LF (CR이 아닌) 만 벗어날 수 있습니다.
jeb

그래서 이것은 이전이 (커밋에 대해 DIFF에 Windows에서 자식을 사용하는 이유 HEAD^) 문제가있다.
다니엘 Trebbien

31

bash에서 '$ ()'의 백틱과 같은 명령을 실행하고 출력을 처리 할 수 ​​있습니다.

for /f %i in ('dir /on /b *.jpg') do echo --^> %i

파일 이름에 공백이 있으면 다음을 사용하십시오.

for /f "tokens=*" %i in ('dir /on /b *.jpg') do echo --^> %i

2
이름에 공백이있는 파일 이름으로는 작동하지 않습니다 ...이 방법 : / f "tokens = *"의 % i in ( 'dir / on / b * .jpg') echo-^> % i
doekman

잘 잡았습니다. 개인적으로 필자는 파일 이름의 공백이 9 번째 지옥의 깊이에서 나오는 사악한 끔찍한 것이라고 생각합니다. 그러나 우리는 그들을 위해 음식을 제공해야합니다.
paxdiablo

이것이 내가 본 가장 이상한 구문입니다. 이 backtick.bat를 만들고 문자열을 전달하면 작동합니까?
idbrii

30

빈 파일 만들기 :

> copy nul filename.ext

6
@devio : 에코. 빈 줄을 넣습니다. 파일이 비어 있지 않습니다!
Paulius

4
나는 그것을 위해 사용 type nul > filename.ext합니다.
Benoit

니스 터치 터치가 오랫동안 있었는지 궁금했습니다.
jdelator

항상 사용했습니다ren > blah.txt
Synetech

28

명령에서 모든 출력을 숨기려면> nul 2> & 1로 리디렉션하십시오.

예를 들어, 일부 명령 줄 프로그램은> nul로 리디렉션하더라도 출력을 표시합니다. 그러나 아래 줄과 같이 출력을 리디렉션하면 모든 출력이 억제됩니다.

PSKILL NOTEPAD >nul 2>&1

편집 : 작동 방법에 대한 설명은 명령 출력 무시를 참조하십시오 .


1
이것이 어떻게 작동하는지 아십니까? 2> & 1 비트의 의미는 무엇입니까?
Scott Langham 10

12
> nul은 STDOUT을 nul로 리디렉션합니다. 2> & 1은 STDERR을 STDOUT이 가리키는 곳으로 리디렉션합니다.
aphoria

구체적으로, 2> & 1은 "파일 핸들 클론"이며 STDERR을 STDOUT의 클론으로 설정합니다. > NUL 다음에 두는 것이 중요합니다. STDOUT 이 경로 재 지정된 이전이 아니라 복제되기 때문 입니다. (내가 틀렸다면 정정 해주세요.)
leander

1
PSKILL 어디에서 오는지 당신의 그 궁금 들어, 체크 아웃 sysinternals.com를 . Pro 버전을 사용하는 경우 다소 비슷한 기본 TSKILL 명령이 있어야합니다.
스타일로 코딩하기

1
pskill 또는 tskill이없는 경우 사용한 대부분의 Windows 시스템에는이 포함되어 taskkill있습니다.
idbrii

25
PAUSE

실행을 중지하고 다음 프롬프트를 표시합니다.

계속하려면 아무 키나 누르십시오. . .

Windows 탐색기에서 배치를 두 번 클릭하여 배치를 실행하고 명령 창의 플래시가 아니라 실제로 출력을 확인하려는 경우에 유용합니다.


내가 쓰는 모든 스크립트의 끝에 태그를 붙일 때 나는 이것을 "미사용"이라고 부르지 않을 것이다. IDE가 일반적으로 Enter 키를 누를 방법이 없기 때문에 IDE가 스크립트를 실행하고 출력을 캡처하도록하려면 다시 작동하지 않습니다.
Nicholas Flynt

15
"일시 정지"의 한 가지 깔끔한 기능은 "어떤 키"를받을 터미널이없는 경우 (예를 들어 배치 파일이 시스템 서비스에서 실행되는 경우)이를 감지하여 계속 진행
한다는

4
Charlie Somerville에게 +1하면 모든 게임 프로그래머의 'go.bat'가 90 년대 초반에 그것을 사용한 것으로 알려져 있습니다.
LiraNuna

6
모든 배치 파일을 오염시키지 않고 CLI 괴짜에게 사용하기 성가신 대신 Start / Run /을 사용하고 'cmd / k'와 배치 파일 이름을 입력 할 수 있습니다. 또는 HKCR \ batfile \ shell \ open \ command 기본 문자열을 'cmd / k "% 1"% *'로 변경하십시오. 또는 '@cmd / k $ *'를 실행하는 다른 배치 파일을 만들어 바탕 화면에 놓고 다른 배치 파일을 놓습니다. 일시 중지에 대한 대안이 많이 있습니다. 그들을 고려하십시오.
시스템 일시

1
@gnud : 당신은 여전히 스크립트에 파이프 할 수 있습니다 echo.|batch-with-pause.bat'어떤 키'를 누르는 것과 같은 효과를 가질 것입니다 ...
커트 Pfeifle

25

배쉬 (및 다른 쉘)와 동등

echo -n Hello # or
echo Hello\\c

Hello후행 줄 바꿈없이 " " 를 출력 합니다. 이 작업을 수행하는 cmd 핵 :

<nul set /p any-variable-name=Hello

set /p사용자에게 입력을 요구하는 방법입니다. 주어진 문자열을 내 보낸 다음 사용자가 응답을 입력 할 때까지 (같은 줄에서, CRLF 없음) 기다립니다.

<nul빈 응답을 set /p명령에 파이프하기 만하면 결과는 생성 된 프롬프트 문자열입니다. 빈 응답으로 인해 사용 된 변수는 변경되지 않습니다.

문제는 다음과 같습니다. 선행 등호를 출력 할 수 없으며 Vista에서는 선행 공백 문자가 제거되지만 XP에서는 제거되지 않습니다.


18

환경 변수를 설정할 때 검색 및 교체 :

> @set fname=%date:/=%

... 타임 스탬프가 지정된 파일 이름에 사용하기 위해 날짜에서 "/"를 제거합니다.

하위 문자열도 ...

> @set dayofweek=%fname:~0,3%

17

정수 산술 :

> SET /A result=10/3 + 1
4

SET이 계산할 수있는 시간은 얼마나 되었습니까? 윈도우 XP?
chakrit

1
값이 얼마나 큰지 묻는다면 이것이 32 비트라고 생각합니다. +/- 20 억입니다.
Chris Noe

1
SET이 얼마나 오래 계산할 수 있었습니까? Windows XP부터?
Michael Myers

3
CMD.EXE의 SET은 NT 3.1 이후부터 계산할 수있었습니다. CMD.EXE가 COMMAND.COM과 정확히 같지 않다는 것을 누군가가 알아 차리는데 오랜 시간이 걸렸습니다 ...
RBerteig

16

명령 구분 기호 :

cls & dir
copy a b && echo Success
copy a b || echo Failure

두 번째 줄에서 && 다음의 명령은 첫 번째 명령이 성공한 경우에만 실행됩니다.

세 번째 줄에서 || 다음의 명령 첫 번째 명령이 실패한 경우에만 실행됩니다.



15

if 문을 연결하여 단락 부울`and '와 같은 효과를 얻을 수 있습니다.

if foo if bar baz

1
이것은 실제로 다음과 같은 경우 중첩에 대한 지름길입니다 : if foo ( if bar ( baz ) )(괄호 뒤에 줄 바꿈을 상상해보십시오.)
idbrii

14

유니 코드 텍스트 파일 (16bit / char)을 ASCII DOS 파일 (8bit / char)로 빠르게 변환합니다.

C:\> type unicodeencoded.txt > dosencoded.txt

가능한 경우 보너스로 문자가 올바르게 매핑됩니다.


1
그것은 ANSI DOS 파일입니다-ASCII는 7bit / char입니다.
MarkJ

Lol, 이것은 반 패턴이며,이 변환은 실패 할 가능성이 높습니다. UTF-8 인 유니 코드를 지원하는 유일한 8 비트 인코딩은 M $ 덕분에 Windows에서 UTF-8 코드 페이지를 설정할 수 없습니다.
sorin

14

블록 구조 인 경우 :

if "%VS90COMNTOOLS%"=="" (
  echo: Visual Studio 2008 is not installed
  exit /b
)

3
변수가 확장 지연없이 한 번에 모두 확장된다는 것을 알고 있다면, 즉 % ERRORLEVEL %을 현명하게 사용할 수 없습니다.
Duncan Smart

if 문을 조기에 종료하기 때문에 :: 스타일 주석이 포함 된 레이블을 사용할 수 없습니다.
스타일로 코딩하기

2
@ Duncan : 의사 변수를 사용해서는 안됩니다 %ERRORLEVEL%. 그게 다야 if errorlevel <foo>. 그리고 그것은 실제로 그러한 블록에서 작동합니다.
Joey

12

변수 확장 지연 (잘 측정하기 위해 하위 문자열을 던짐) :

    @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

12

많은 기능을 제공하지는 않지만 작업 표시 줄의 긴 스크립트에서 상태를 제공하거나 사용자 피드백을 향상시키는 것과 같이 몇 가지 용도로 title 명령을 사용할 수 있습니다.

@title Searching for ...
:: processing search
@title preparing search results
:: data processing

2
흥미 롭군 그 후에는 현재 실행중인 명령을 표시하는 일반 기능이 손실됩니다. 그것을 재설정 할 수있는 방법이 있습니까?
Chris Noe

2
technet.microsoft.com/ko-kr/library/bb491017.aspx에 따르면 "제목"으로 자체적으로 재설정 할 수 있지만 Windows 7에서는 작동하지 않는 것 같습니다 ...
ℳ.

11

편집기가 없어서 배치 파일을 만들어야합니까?

copy con test.bat

명령을 입력하고 Enter 키를 눌러 새 줄을 입력하십시오. Ctrl-Z와 Enter를 눌러 파일을 닫으십시오.


4
허, 저를 다시 데려다줍니다.
스타일로 코딩하기

11

문자열 공제에의 예 datetime라는 이름의 파일을 얻을 "YYYY-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 진수 값이 어디에서 0F, X 어디 - 배경, Y는 - 텍스트, X = Y 색상은 변경되지 않습니다 때.

컬러 Z

텍스트 색상을 'Z'로 변경하고 검정색 배경을 설정하면 '색상 0'이 작동하지 않습니다

색상의 이름은

색깔 ?


편집; _는 이탤릭체로 해석되었습니다. 좋은 코드입니다.

@Duncan Smart : 사실이 아니며 영국 영어로도 작동합니다 (기술적으로 "컬러", grrr 여야 함)
demoncodemonkey

10

간격 및 이스케이프 문자로 출력을 완전히 제어합니다. :

echo.    ^<resourceDir^>/%basedir%/resources^</resourceDir^>

1
어떻게 작동합니까? 점은 텍스트 출력의 시작을 구분합니까?
Chris Noe

3
"echo.x"는 "<space> x"를 출력하고 "echo x"는 "x"만 출력합니다. 이것은 선행 공백을 허용합니다. 또한 "^"이스케이프 문자는 cmd가 모든 "<"및 ">"문자가 I / O 리디렉션이라고 생각하지 못하게합니다.
paxdiablo

1
echo (이 파일은 echo 파일이 있으면 "echo"라는 파일을 검색하기 때문에 echo가 더 좋습니다. 그렇지 않으면 내부 echo가 실행되지만 내부 echo가 실행되지만 echo보다 느립니다 (
jeb

9

The SoftwareJedi는 이미 for 명령을 언급했지만 매우 강력하므로 다시 언급하겠습니다.

다음은 현재 날짜를 YYYYMMDD 형식으로 출력합니다. 백업용 디렉토리를 생성 할 때 사용합니다.

for /f "tokens=2-4 delims=/- " %a in ('DATE/T') do echo %c%b%a

2
분명히 DATE / T는 유럽에서 29/10/2008, 미국에서 10/29/2008을 반환하므로 현지화가 필요할 수 있습니다! ;-)

맞습니다! 그러나 date 명령을 남용하여 사용되는 날짜 형식을 찾을 수 있습니다.
remonedo

4
FOR를 과도하게 사용하고 있습니다. 날짜 명령을 실행 한 다음 구문 분석하는 대신 % DATE : ~ 10,4 %% DATE : ~ 4,2 %% DATE : ~ 7,2 %를 사용한다고 생각합니다.
스타일로 코딩하기
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.