¿Cómo verificar si un archivo existe en un archivo .BAT de DOS (Windows Command Prompt)?

Tengo que crear un archivo .BAT que hace esto:

  1. Si existe C:\myprogram\sync\data.handler , exit;
  2. Si C:\myprogram\html\data.sql no existe, salga;
  3. En C:\myprogram\sync\ borra todos los archivos y carpetas excepto ( test , test3 y test3 )
  4. Copie C:\myprogram\html\data.sql en C:\myprogram\sync\
  5. Llame a 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.

Puede usar IF EXIST para verificar un archivo:

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

Aquí hay un ejemplo práctico de búsqueda de un archivo o una carpeta:

 REM setup echo "some text" > filename mkdir "foldername" REM finds file IF EXIST "filename" ( ECHO file filename exists ) ELSE ( ECHO file filename does not exist ) REM does not find file IF EXIST "filename2.txt" ( ECHO file filename2.txt exists ) ELSE ( ECHO file filename2.txt does not exist ) REM folders must have a trailing backslash REM finds folder IF EXIST "foldername\" ( ECHO folder foldername exists ) ELSE ( ECHO folder foldername does not exist ) REM does not find folder IF EXIST "filename\" ( ECHO folder filename exists ) ELSE ( ECHO folder filename does not exist ) 

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

Para eliminar un árbol completo, excepto algunas carpetas, consulte la respuesta a esta pregunta: Script por lotes de Windows para eliminar todo en una carpeta, excepto uno

Finalmente, copiar solo significa llamar a COPY y llamar a otro archivo de bat se puede hacer así:

 MYOTHERBATFILE.BAT sync.bat myprogram.ini 

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

 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 los colocaremos 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" 

Use el comando XCOPY :

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

Explicaré lo que significa /c /d /h /e /i /y :

  /C Continues copying even if errors occur. /D:mdy 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 

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

No estoy seguro de lo que quieres decir con esto, pero si solo quieres abrir ambos archivos, simplemente pones la ruta del archivo como

 Path/sync.bat Path/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.

Está utilizando un archivo por lotes. Usted mencionó anteriormente que debe crear un archivo .bat para usar esto:

Tengo que crear un archivo .BAT que hace esto: