2010-12-06 16:36:13 +0000 2010-12-06 16:36:13 +0000
64
64

Hoe controleer ik of er een directory bestaat in Windows?

Ik wil dit Linux/Bash script vertalen naar Windows shell:

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

Het test of er een directory bestaat, en als deze niet bestaat maakt het deze aan.

Antwoorden (9)

79
79
79
2010-12-06 16:47:52 +0000
@echo off
IF exist myDirName ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)

Toegevoegd door Barlop

Terwijl het bovenstaande werkt voor deze specifieke situatie, zegt de titel over het testen specifiek voor een directory. Phogg’s commentaar met behulp van if exist mydirname @echo off IF exist myDirName ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created) `

Toegevoegd door Barlop

Terwijl het bovenstaande werkt voor deze specifieke situatie, zegt de titel over het testen specifiek voor een directory. Phogg’s commentaar met behulp van in plaats van if exist mydirname is de manier. Sommige antwoorden zijn gebruikt maar zijn problematisch in NT. Het niet opnemen van een achterwaartse backslash zal een bestand of een directory testen. Dus, voor een directory, neem de achtergrondzijde op.

21
21
21
2011-12-06 11:52:52 +0000

Hier is wat ik net ontdekte:

Je kunt testen of een nul-bestand bestaat; als de directory bestaat zal het een nul-bestand bevatten, als het nul-bestand niet bestaat dan bestaat de directory niet.

IF exist myDirName/nul ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
11
11
11
2012-05-12 15:36:37 +0000

Gebruik een backslash, geen forward slash: myDirName\nul niet 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 is een directory – bar is een bestand – xyz bestaat niet

bewerken: dit werkt alleen als de naam van de directory geen spaties bevat

5
5
5
2014-06-03 11:10:57 +0000

Sommigen hebben voorgesteld om het te doen, maar dat lijkt niet betrouwbaar te werken in 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

.

4
4
4
2013-10-11 11:29:44 +0000

Ik vroeg me af waarom joe een downvote had omdat ik hetzelfde soort probleem had op Windows 7, namelijk dat

IF EXIST filename\NUL

TRUE voor beide bestanden en directories terugkeerde. Ik vond een alternatieve oplossing op www.robvanderwoude.com/battech_ifexistfolder.php en kwam met een herziene versie van DVF’s FOR loop:

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 ) ) )
1
1
1
2014-06-03 09:50:53 +0000

Ik zie dat velen problemen hebben met het onderscheid tussen bestanden en mappen. Heeft iemand geprobeerd om er gewoon een cd in te stoppen nadat hij het bestaan ervan heeft gecontroleerd? Dan zal cd ofwel slagen of falen.

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
)
0
0
0
2019-11-09 14:56:24 +0000

Ik gebruik liever dir /d | findstr \[\.\.\]:

2>nul dir /d "myDirName" | findstr \[\.\.\] >nul && echo= "ok" || mkDir myDirName&&echo= Is NOT dir

2>nul dir /d "myDirName" | findstr \[\.\.\] >nul && echo= "ok" || mkDir myDirName
  • *

Voor het al dan niet creëren en voor het negeren van fouten…

2>nul mkDir myDirName

Ook…

if exist "myDirName\." (echo/"ok") else mkdir myDirName

rem :: or direct create myDirName hidden/ignoring error
       2>nul mkdir myDirName & if exist "myDirName\." echo/ exist 
rem :: output: exist
``` &001
0
0
0
2012-05-04 10:41:48 +0000
exist myDirName/nul

is ook waar als myDirName een bestand is, whis is niet de gezochte functionaliteit

-1
-1
-1
2018-08-24 18:31:30 +0000

Het vinden van een map moet niet zo moeilijk zijn. Mijn oplossing, gebruik perl:

for($cnt=$#ARGV; $cnt\>=0; --$cnt) { if ( -d "$ARGV[$cnt]" ) { print "argv[$cnt]=$ARGV[$cnt] is a folder\n"; $dir = $ARGV[$cnt]; break; } else { print "argv[$cnt]=$ARGV[$cnt] is Not a folder\n"; } }