Chciałbym przetłumaczyć ten skrypt Linux / Bash na powłokę Windows:
if test -d myDirName; then echo "ok"; else mkdir myDirName; fi
Sprawdza, czy katalog istnieje, a jeśli nie, to go tworzy.
windows-7
command-line
batch-file
Pietro
źródło
źródło
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.Odpowiedzi:
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\
raczejif 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.źródło
if exist mydirname\
a reszta, jak mówisz. Alternatywnie możesz dostać pliktest
binarny i używać go w systemie Windows.mkdir
.if not 1==1 echo hmm
lub jeśli istnieje mojaDirName \ ELSEOto, 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.
źródło
if exist dirname
który wydaje się być specyficzny dla Windows NT.\nul
, nie jest już konieczne w Windows NT, zwykłyif 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
- foo to katalog
- pasek to plik
- xyz nie istnieje
edycja: działa to tylko wtedy, gdy nazwa katalogu nie zawiera spacji
źródło
Niektórzy sugerują zrobienie \ nul, ale wydaje się, że nie działa to niezawodnie w NT
http://www.dostips.com/forum/viewtopic.php?f=3&t=4913
Re pytanie
źródło
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:
źródło
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.
źródło
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życiepushd
/popd
i / lubsetlocal
.jest również prawdą, jeśli myDirName jest plikiem, co nie jest funkcją wyszukiwania
źródło
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:
źródło