Jawaban:
@echo off
IF exist myDirName ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
Ditambahkan oleh Barlop
Sementara hal di atas berfungsi untuk situasi khusus ini, judulnya mengatakan tentang pengujian khusus untuk direktori. Komentar Phogg menggunakan if exist mydirname\
bukan if exist mydirname
caranya. Beberapa jawaban telah menggunakan \ nul tetapi \ nul bermasalah di NT. Tidak termasuk garis miring terbalik akan menguji file atau direktori. Jadi, untuk direktori, sertakan trailing backslash.
if exist mydirname\
dan sisanya seperti yang Anda katakan. Sebagai alternatif, Anda sebenarnya bisa mendapatkan test
biner dan menggunakannya di Windows.
mkdir
bisa.
if not 1==1 echo hmm
atau jika ada myDirName \ ELSE blahblahblah
Inilah yang baru saya ketahui:
Anda dapat menguji apakah ada file nul; jika direktori itu ada akan berisi file nul, jika file nul tidak ada maka direktori tidak ada.
IF exist myDirName/nul ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
if exist dirname
yang tampaknya khusus untuk Windows NT.
\nul
, tidak perlu di Windows NT lagi, polos if exist "C:\Program Files (x86)"
harus bekerja (kecuali Anda masih menargetkan Windows 98 ...)
Gunakan backslash, bukan forward slash: myDirName\nul
notmyDirName/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 adalah direktori
- bar adalah file
- xyz tidak ada
sunting: ini hanya berfungsi jika nama direktori tidak mengandung spasi
Beberapa menyarankan melakukan \ nul, tetapi itu tampaknya tidak bekerja dengan baik di 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
Kembali pertanyaannya
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>
Saya bertanya-tanya mengapa joe memiliki downvote karena saya mengalami masalah yang sama pada Windows 7, yaitu itu
JIKA ADA nama file \ NUL
mengembalikan TRUE untuk file dan direktori. Saya menemukan solusi alternatif di www.robvanderwoude.com/battech_ifexistfolder.php dan muncul dengan versi revisi dari loop 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 ) ) )
Saya melihat banyak masalah dengan membedakan antara file dan folder. Adakah yang mencoba untuk melakukan cd ke dalamnya setelah memeriksanya? Maka cd akan berhasil atau gagal.
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
setelah baris pertama seharusnya %MyDir%
. (2) The cd ..
tidak akan melakukan apa yang Anda inginkan jika %MyDir%
pathname multi-level (misalnya, Pictures\cats
) atau bahkan pathname absolut (misalnya, \Windows
). Pertimbangkan untuk menggunakan pushd
/ popd
dan / atau setlocal
.
exist myDirName/nul
juga benar jika myDirName adalah file, bukan fungsi yang dicari
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>
Saya bukan penggemar NT di NT tetapi tidak. Anda seharusnya memberikan beberapa output.
Menemukan folder seharusnya tidak sesulit ini. Solusi saya, gunakan perl:
untuk ($ cnt = $ # ARGV; $ cnt> = 0; - $ cnt) { if (-d "$ ARGV [$ cnt]") { print "argv [$ cnt] = $ ARGV [$ cnt] adalah folder \ n"; $ dir = $ ARGV [$ cnt]; istirahat; } lain { print "argv [$ cnt] = $ ARGV [$ cnt] Bukan folder \ n"; } }
mkdir -p myDirName
. Setelah menghabiskan berhari-hari mencoba menerjemahkan bash-script yang relatif sederhana ke dalam batch-sh * t (menugaskan hasil fungsi ke variabel?), Saya memutuskan untuk membuat orang menginstal cygwin.