2010-06-11 202 views
142

tengo que crear un archivo .BAT que hace esto:¿Cómo verificar si un archivo existe en un archivo .BAT de DOS (Windows Command Prompt)?

  1. Si existe C:\myprogram\sync\data.handler, salida;
  2. Si C:\myprogram\html\data.sql no existe, salga;
  3. En C:\myprogram\sync\ borrar todos los archivos y carpetas, excepto (test, test3 y test2)
  4. Copia C:\myprogram\html\data.sql a C:\myprogram\sync\
  5. Call otro archivo por lotes con la opción sync.bat myprogram.ini.

Si fue en el entorno Bash, fue fácil para mí, pero no sé cómo probar si existe un archivo o una carpeta y si es un archivo o una carpeta.

Respuesta

215

Se puede utilizar si existen para comprobar si hay un archivo:

IF EXIST "filename" (
REM Do one thing 
) ELSE (
REM Do another thing 
) 

Si quiere buscar una unidad o directorio, consulte http://support.microsoft.com/kb/65994 para ejemplos

+1

¿Cómo funciona un cheque ruta completa con el nombre de archivo? Puntos de bonificación si la ruta contiene espacios. Como dijo OP, simple en BASH. – Nick

+2

@Nick: Simple en 'cmd' también - por favor haga una pregunta diferente - no cuestan mucho. Es probable que agregar un comentario adicional a uno que tenga más de 3 años genere muchas respuestas (pero primero verifique SO para obtener respuestas a esta pregunta precisa, de lo contrario, obtendrá su nueva pregunta marcada como duplicada ...) – Magoo

+7

Algo a tener en cuenta en el archivo de ayuda 'IF /?': 'La cláusula ELSE debe aparecer en la misma línea que el comando después del IF. Esto me quemó. espero que te ayude – funkymushroom

11

tipo SI /? para obtener ayuda sobre si, se explica claramente cómo usar IF EXIST.

Para eliminar un árbol completo, excepto algunas carpetas, vea la respuesta a esta pregunta: Windows batch script to delete everything in a folder except one

Por último copiar sólo significa llamar COPIA y llamar a otro archivo del palo que se puede hacer así:

MYOTHERBATFILE.BAT sync.bat myprogram.ini 
10

Aquí es un buen ejemplo de cómo hacer un comando Si un archivo o no existe:

if exist C:\myprogram\sync\data.handler echo Now Exiting && Exit 
if not exist C:\myprogram\html\data.sql Exit 

tomaremos esos tres archivos y lo puso en un lugar temporal. Después de eliminar la carpeta, restaurará esos tres archivos.

xcopy "test" "C:\temp" 
xcopy "test2" "C:\temp" 
del C:\myprogram\sync\ 
xcopy "C:\temp" "test" 
xcopy "C:\temp" "test2" 
del "c:\temp" 

utilizar el comando XCOPY:

xcopy "C:\myprogram\html\data.sql" /c /d /h /e /i /y "C:\myprogram\sync\" 

voy a explicar lo que significa que el /c /d /h /e /i /y:

/C   Continues copying even if errors occur. 
    /D:m-d-y  Copies files changed on or after the specified date. 
       If no date is given, copies only those files whose 
       source time is newer than the destination time. 
    /H   Copies hidden and system files also. 
    /E   Copies directories and subdirectories, including empty ones. 
       Same as /S /E. May be used to modify /T. 
    /T   Creates directory structure, but does not copy files. Does not 
       include empty directories or subdirectories. /T /E includes 
    /I   If destination does not exist and copying more than one file, 
       assumes that destination must be a directory. 
    /Y   Suppresses prompting to confirm you want to overwrite an 
       existing destination file. 

`To see all the commands type`xcopy /? in cmd 

Call otro archivo por lotes con la opción sync.bat myprogram.ini.

no estoy seguro de lo que quiere decir con esto, pero si lo que desea es abrir ambos archivos que acaba de poner la ruta del archivo como

Path/sync.bat 
Path/myprogram.ini 

Si lo fue en el Entorno Bash fue fácil para mí, pero no sé saber cómo probar si existe un archivo o una carpeta y si es un archivo o una carpeta .

Está utilizando un archivo por lotes. Usted ha mencionado anteriormente que tiene que crear un archivo .bat para utilizar este:

tengo que crear un archivo que hace esto:

+0

¿Qué se llama con esta respuesta? –

Cuestiones relacionadas