Odpowiedzi:
@echo off
IF exist myDirName ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
Dodane przez Barlop
Chociaż powyższe działa w tej konkretnej sytuacji, tytuł mówi o testowaniu specjalnie dla katalogu. Komentowanie Phogga jest if exist mydirname\
raczej if exist mydirname
sposobem niż sposobem. Niektóre odpowiedzi wykorzystały \ nul, ale \ nul jest problematyczne w NT. Nie uwzględnienie końcowego ukośnika odwrotnego spowoduje sprawdzenie pliku lub katalogu. Tak więc, dla katalogu, dołącz końcowy ukośnik odwrotny.
if exist mydirname\
a reszta, jak mówisz. Alternatywnie możesz dostać plik test
binarny i używać go w systemie Windows.
mkdir
.
if not 1==1 echo hmm
lub jeśli istnieje mojaDirName \ ELSE
Oto, co właśnie odkryłem:
Możesz sprawdzić, czy istnieje plik zerowy; jeśli katalog istnieje, będzie zawierał plik nul, jeśli plik nul nie istnieje, to katalog nie istnieje.
IF exist myDirName/nul ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
if exist dirname
który wydaje się być specyficzny dla Windows NT.
\nul
, nie jest już konieczne w Windows NT, zwykły if exist "C:\Program Files (x86)"
powinien działać (chyba że nadal celujesz w Windows 98 ...)
Użyj ukośnika odwrotnego, a nie ukośnika: myDirName\nul
niemyDirName/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 to katalog
- pasek to plik
- xyz nie istnieje
edycja: działa to tylko wtedy, gdy nazwa katalogu nie zawiera spacji
Niektórzy sugerują zrobienie \ nul, ale wydaje się, że nie działa to niezawodnie w 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 pytanie
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>
Zastanawiałem się, dlaczego Joe miał głos negatywny, ponieważ miałem taki sam problem w systemie Windows 7, a mianowicie
JEŚLI ISTNIEJE nazwa pliku \ NUL
zwracał PRAWDA zarówno dla plików, jak i katalogów. Znalazłem alternatywne rozwiązanie na www.robvanderwoude.com/battech_ifexistfolder.php i opracowałem poprawioną wersję pętli FOR 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 ) ) )
Widzę, że wielu ma problemy z rozróżnianiem plików i folderów. Czy ktoś próbował po prostu cd do niego po sprawdzeniu, czy istnieje? Wtedy cd albo się powiedzie, albo nie powiedzie.
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
)
MyDir
po pierwszej linii powinny być %MyDir%
. (2) cd ..
Nie zrobi tego, co chcesz, jeśli %MyDir%
jest to ścieżka wielopoziomowa (np. Pictures\cats
) Lub nawet bezwzględna nazwa ścieżki (np \Windows
.). Rozważ użycie pushd
/ popd
i / lub setlocal
.
exist myDirName/nul
jest również prawdą, jeśli myDirName jest plikiem, co nie jest funkcją wyszukiwania
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>
Nie jestem fanem \ nul w NT, ale tak nie jest. Powinieneś dać jakieś wyjście.
Znalezienie folderu nie powinno być takie trudne. Moje rozwiązanie, użyj perla:
for ($ cnt = $ # ARGV; $ cnt> = 0; - $ cnt) { if (-d „$ ARGV [$ cnt]”) { print "argv [$ cnt] = $ ARGV [$ cnt] to folder \ n"; $ dir = $ ARGV [$ cnt]; przerwa; } else { print "argv [$ cnt] = $ ARGV [$ cnt] nie jest folderem \ n"; } }
mkdir -p myDirName
. Po spędzeniu dni na tłumaczeniu stosunkowo prostych skryptów bash na batch-sh * t (przypisywanie wyniku funkcji zmiennej?), Postanowiłem po prostu zmusić ludzi do zainstalowania cygwina.