80 votes

Comment vérifier si un répertoire existe dans Windows ?

Je voudrais traduire ce script Linux/Bash en script Windows :

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

Il teste si un répertoire existe, et s'il n'existe pas, il le crée.

102voto

Sathyajith Bhat Points 60630
@echo off
IF exist myDirName ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)

Ajouté par Barlop

Si ce qui précède fonctionne pour cette situation particulière, le titre parle de tests spécifiques pour un répertoire. Le commentaire de Phogg utilisant if exist mydirname\ plutôt que if exist mydirname est la voie à suivre. Certaines réponses ont utilisé \nul mais \nul est problématique dans le NT. Le fait de ne pas inclure de barre oblique inverse de fin de ligne permet de tester un fichier ou un répertoire. Donc, pour un répertoire, incluez la barre oblique inverse de fin.

22voto

dev008 Points 221

Voici ce que je viens de découvrir :

Vous pouvez tester si un fichier nul existe ; si le répertoire existe, il contiendra un fichier nul, si le fichier nul n'existe pas, alors le répertoire n'existe pas.

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

13voto

diEcho Points 549

Utilisez une barre oblique inverse, et non une barre oblique directe : 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 est un répertoire
-- bar est un fichier
-- xyz n'existe pas

edit : cela ne fonctionne que si le nom du répertoire ne contient pas d'espaces

7voto

barlop Points 21549

Certains ont suggéré de faire \nul mais cela ne semble pas fonctionner de manière fiable sous 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

Re la question

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>

4voto

Damian Points 41

Je me suis demandé pourquoi Joe avait un downvote car je rencontrais le même genre de problème sous Windows 7, à savoir que

SI EXIST filename \NUL

retournait VRAI pour les fichiers et les répertoires. J'ai trouvé une solution alternative à www.robvanderwoude.com/battech_ifexistfolder.php et est arrivé avec une version révisée du boucle for de DVF :

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 ) ) )

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X