web-dev-qa-db-fra.com

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

J'aimerais traduire ce script Linux/Bash en Windows Shell:

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

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

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

Ajouté par Barlop

Bien que ce qui précède fonctionne pour cette situation particulière, le titre dit à propos de tester spécifiquement un répertoire. Le commentaire de Phogg utilisant if exist mydirname\ plutôt que if exist mydirname est la solution. Certaines réponses ont utilisé\nul mais\nul est problématique dans NT. Si vous n'incluez pas de barre oblique inverse, vous testerez un fichier ou un répertoire. Donc, pour un répertoire, incluez la barre oblique inverse de fin.

65
Sathyajith Bhat

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, le répertoire n'existe pas.

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

Utilisez une barre oblique inversée, pas une barre oblique: myDirName\nul pas 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

11
DVF

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

Je me demandais pourquoi joe avait un vote négatif, alors que je rencontrais le même genre de problème sous Windows 7, à savoir que

SI EXIST nomFichier\NUL

retournait VRAI pour les fichiers et les répertoires. J'ai trouvé une solution alternative sur www.robvanderwoude.com/battech_ifexistfolder.php et suis parvenu à une version révisée de la 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 ) ) )
4
Damian

Je vois beaucoup de problèmes de différenciation entre les fichiers et les dossiers. Est-ce que quelqu'un a essayé de simplement y insérer un CD après avoir vérifié qu'il existe? Ensuite, cd réussira ou échouera.

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
Richard Rombouts
exist myDirName/nul

est également vrai si myDirName est un fichier qui n'est pas la fonctionnalité recherchée

0
Joe