Windows에 디렉토리가 있는지 확인하는 방법?


59

이 Linux / Bash 스크립트를 Windows 셸로 변환하고 싶습니다.

if test -d myDirName; then echo "ok"; else mkdir myDirName; fi

디렉토리가 존재하고 존재하지 않는지 테스트합니다.


3
실제 linux / bash 명령은 다음과 같습니다 mkdir -p myDirName. 비교적 간단한 bash 스크립트를 batch-sh * t로 변환하는 데 며칠을 보낸 후 (함수의 결과를 변수에 할당 하시겠습니까?) 사람들이 cygwin을 설치하도록 결정했습니다.
michael

답변:


73
@echo off
IF exist myDirName ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)

추가 한 Barlop

위의 상황이 이러한 특정 상황에서 작동하지만 제목은 디렉토리에 대한 테스트에 관한 것입니다. Phogg의 의견이 if exist mydirname\아닌 사용 if exist mydirname방법입니다. 일부 대답은 \ nul을 사용했지만 \ nul은 NT에서 문제가 있습니다. 후행 백 슬래시를 포함하지 않으면 파일 또는 디렉토리를 테스트합니다. 따라서 디렉토리의 경우 후행 백 슬래시를 포함하십시오.


23
파일 존재 여부를 테스트하는 데 적합하지만 이것이 디렉토리라는 것을 어떻게 알 수 있습니까? 가장 간단한 대답은 if exist mydirname\ 나머지 말입니다. 또는 실제로 test바이너리를 얻어 Windows에서 사용할 수도 있습니다.
phogg

@phogg :이 특정 질문의 맥락에서 : 존재하지만 파일 인 경우 여전히 파일을 사용할 수 없습니다 mkdir.
grawity

@ grawity : 존재하지만 파일 인 경우 스크립트를 디렉토리로 사용하려고 할 때 스크립트가 나중에 실패 할 수 있습니다.
phogg December

존재하지 않는지 어떻게 확인할 수 있습니까?
Sungguk Lim

1
myDirName을 \`유사하게 존재하지 않으면`작성하여 @sunglim if not 1==1 echo hmm 또는 myDirName \의 ELSE의 blahblahblah있는 경우
barlop

20

내가 방금 알아 낸 것은 다음과 같습니다.

널 파일이 존재하는지 테스트 할 수 있습니다. 디렉토리가 존재하면 nul 파일을 포함하고, nul 파일이 존재하지 않으면 디렉토리가 존재하지 않습니다.

IF exist myDirName/nul ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)

2
+1- if exist dirnameWindows NT에만 해당되는 일반과 달리 모든 Windows 및 MS-DOS 버전에서 작동합니다 .
grawity

그것은 리눅스와 비교할 때 바보 같은 코드였습니다 mkdir -p myDirName : p
Kit Ho

6
슬래시가 아니라 백 슬래시 여야합니다.
Nathan Garabedian 님이

@grawity 당신은 이것에 대해 어떻게 생각하십니까? dostips.com/forum/viewtopic.php?f=3&t=4913
barlop

@ barlop : cmd.exe는 최악의 스크립팅 언어 중 하나이며 가능한 경우 PowerShell 또는 다른 대안을 사용해야한다고 생각합니다. 에 관해서는 \nul, 그것은 일반은 더 이상 윈도우 NT에서 필요하지 않습니다 if exist "C:\Program Files (x86)"작동합니다 (당신은 여전히 윈도우 98 ... 표적으로하지 않는 한)
grawity

11

백 슬래시를 사용하지 슬래시 : myDirName\nul하지myDirName/nul

md foo 
echo.>bar 
for %I in (foo bar xyz) do @( 
  if exist %I ( 
    if exist %I\nul ( 
      echo -- %I is a directory 
    ) else ( 
      echo -- %I is a file 
    ) 
  ) else ( 
    echo -- %I does not exist 
  ) 
)

-foo는 디렉토리입니다 -bar는
파일입니다
-xyz는 존재하지 않습니다

편집 : 디렉토리 이름에 공백이없는 경우에만 작동합니다


5

일부는 \ nul을 제안했지만 NT에서 안정적으로 작동하지 않는 것 같습니다.

C:\blah>md abc

C:\blah>if exist abc\nul echo yes
yes

C:\blah>if exist "abc\nul" echo yes

C:\blah>

http://www.dostips.com/forum/viewtopic.php?f=3&t=4913

foxidrive writes-

The trick with nul worked in pre NT versions of windows.

Now you would use this, with a trailing backslash.

if exist "C:\abcde\" echo the folder exists

질문을 다시

C:\blah>if exist "abcd\" (echo yes) else (echo no && mkdir abcd)
no

C:\blah>if exist "abcd\" (echo yes) else (echo no && mkdir abcd)
yes

C:\blah>

4

Windows 7에서 같은 종류의 문제가 발생하여 joe가 downvote를 갖는 이유가 궁금했습니다.

존재하는 경우 filename \ NUL

파일과 디렉토리 모두에 대해 TRUE를 반환했습니다. www.robvanderwoude.com/battech_ifexistfolder.php 에서 대안 솔루션을 찾았 으며 DVF의 FOR 루프 개정판 을 찾았 습니다.

FOR %I in (foo bar xyz) DO @( PUSHD %I && (POPD & echo -- %I is a directory) || ( IF exist %I ( echo -- %I is a file ) ELSE ( echo -- %I does not exist ) ) )

그것이 유일한 해결책이었습니다. 감사합니다. 오류 메시지를 피하기 위해 "2> NUL"을 추가하고 에코 값을 1 (디렉토리 존재), 0 (디렉토리 존재하지 않음), -1 (같은 이름의 파일이 존재 함) FOR % A IN ( " C : \ temp \ foo \ HELLO WORLD5 ") DO @ (PUSHD"% A "2> NUL && (POPD & ECHO 1) || (존재하는 경우 % A (ECHO -1) ELSE (ECHO 0
Christoph

(죄송하지만, 많은 일을 시도했지만 회신에 코드로 코드 형식을 지정하지 못했습니다 :-( 5 분 후에 주석을 편집 할 때까지 :-()
Christoph

1

많은 사람들이 파일과 폴더를 구별하는 데 문제가 있음을 알았습니다. 누군가가 존재하는지 확인한 후 간단히 CD를 넣으려고 했습니까? 그러면 cd는 성공하거나 실패합니다.

set MyDir = "MyTestDir"
IF exist MyDir (
    cd MyDir 
    IF ERRORLEVEL NEQ 0 (
        echo "Error: %MyDir% already exists, but it is a file!"
        exit 1
    ) else (
        # Do not forget to cd back
        cd ..
    )
) else (
   # Did not exist yet, so create it.
   mkdir MyDir
)

(1) 변수를 사용하려면 변수를 사용하십시오. MyDir첫 번째 줄 이후의 모든 항목은 이어야합니다 %MyDir%. (2) 다중 레벨 경로 이름 (예 :) 또는 절대 경로 이름 (예 :) 인 cd ..경우 원하는 것을 수행하지 않습니다 . / 및 / 또는 사용을 고려하십시오 . %MyDir%Pictures\cats\Windowspushdpopdsetlocal
Scott

0
exist myDirName/nul

myDirName이 파일이면 whis는 검색된 기능이 아닙니다.


1
C:\blah>touch abe<ENTER>C:\blah>if exist abe\nul echo err<ENTER> C:\blah>if exist abe/nul echo err<ENTER>C:\blah>나는 NT에서 \ nul의 팬이 아니지만 그렇지 않습니다. 당신은 약간의 출력을 주었을 것입니다.
barlop

-1

폴더를 찾는 것이 어렵지 않아야합니다. 내 솔루션은 perl을 사용하십시오.

for ($ cnt = $ # ARGV; $ cnt> = 0;-$ cnt)
{
   if (-d "$ ARGV [$ cnt]") { 
      print "argv [$ cnt] = $ ARGV [$ cnt]는 폴더 \ n";
      $ dir = $ ARGV [$ cnt];
      단절;
   } else {
      print "argv [$ cnt] = $ ARGV [$ cnt]는 폴더가 아닙니다 \ n";
   }
}

나는 그것을 얻지 못한다
Pierre.Vriens
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.