Me gustaría traducir este script de Linux / Bash al shell de Windows:
if test -d myDirName; then echo "ok"; else mkdir myDirName; fi
Comprueba si existe un directorio, y si no existe, lo crea.
windows-7
command-line
batch-file
Pietro
fuente
fuente
mkdir -p myDirName
. Después de pasar días tratando de traducir bash-scripts relativamente simples a batch-sh * t (¿asignar el resultado de una función a una variable?), He decidido hacer que la gente instale cygwin.Respuestas:
Añadido por Barlop
Si bien lo anterior funciona para esta situación particular, el título dice acerca de las pruebas específicas para un directorio. El comentario de Phogg usando en
if exist mydirname\
lugar deif exist mydirname
es el camino. Algunas respuestas han usado \ nul pero \ nul es problemático en NT. Si no se incluye una barra diagonal inversa posterior, se probará un archivo o un directorio. Entonces, para un directorio, incluya la barra invertida final.fuente
if exist mydirname\
y el resto como dices. Alternativamente, podría obtener untest
binario y usarlo en Windows.mkdir
hacerlo.if not 1==1 echo hmm
o si existe myDirName \ ELSE blahblahblahEsto es lo que acabo de descubrir:
Puede probar si existe un archivo nul; si el directorio existe, contendrá un archivo nul, si el archivo nul no existe, entonces el directorio no existe.
fuente
if exist dirname
que parece ser específico de Windows NT.\nul
, ya no es necesario en Windows NT, simplementeif exist "C:\Program Files (x86)"
debería funcionar (a menos que todavía esté apuntando a Windows 98 ...)Utilice una barra diagonal inversa, no barra diagonal:
myDirName\nul
nomyDirName/nul
- foo es un directorio
- la barra es un archivo
- xyz no existe
editar: esto solo funciona si el nombre del directorio no contiene espacios
fuente
Algunos han sugerido hacer \ nul, pero eso no parece funcionar de manera confiable en NT
http://www.dostips.com/forum/viewtopic.php?f=3&t=4913
Re la pregunta
fuente
Me preguntaba por qué Joe tenía un voto negativo ya que estaba experimentando el mismo tipo de problema en Windows 7, a saber, que
SI EXISTEN nombre de archivo \ NUL
estaba devolviendo VERDADERO para ambos archivos y directorios. Encontré una solución alternativa en www.robvanderwoude.com/battech_ifexistfolder.php y se me ocurrió una versión revisada del bucle FOR de DVF:
fuente
Veo que muchos tienen problemas para diferenciar entre archivos y carpetas. ¿Alguien ha intentado simplemente cd en él después de comprobar que existe? Entonces cd tendrá éxito o fallará.
fuente
MyDir
posteriores a la primera línea deben ser%MyDir%
. (2)cd ..
No hará lo que quiera si%MyDir%
es un nombre de ruta de varios niveles (por ejemplo,Pictures\cats
) o incluso un nombre de ruta absoluto (por ejemplo,\Windows
). Considere usarpushd
/popd
y / osetlocal
.también es cierto si myDirName es un archivo, whis no es la funcionalidad buscada
fuente
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>
No soy fanático de \ nul en NT pero no lo es. Deberías haber dado alguna salida.Encontrar una carpeta no debería ser tan difícil. Mi solución, usa perl:
fuente