utiles programacion programa por para lotes ejemplos ejecutar crear comandos batch bat avanzados avanzada archivos archivo file batch-file directory find cd

file - programacion - crear archivo bat para ejecutar programa



¿Cómo encuentro el directorio actual de un archivo por lotes y luego lo uso para la ruta? (4)

Tengo un archivo por lotes que pretendo distribuir a nuestros clientes para ejecutar una tarea de software.

Los distribuimos como una carpeta o .zip con los archivos dentro. En el interior, están los archivos por lotes y otra carpeta con los archivos necesarios para ejecutar el lote.

Normalmente, cuando haces un lote, escribes la ruta donde están los archivos. Pero no sabré dónde están los archivos. Los archivos se mantendrán dentro de la carpeta maestra, pero necesito que el lote encuentre esa carpeta para ejecutar los archivos.

Entonces, por ejemplo: si tienen la carpeta maestra en el escritorio y la ejecutan, tendría que ser algo así como "C:/Users/Username/Desktop" para ejecutar. Tendría el CD por lotes en esa ubicación.

Pero, ¿y si lo ejecutan desde documentos? No sé el nombre de usuario, así que tengo que hacer que el lote lo encuentre de alguna manera. Cualquier código y / o instrucción sería genial.


La respuesta de ElektroStudios es un poco engañosa.

"cuando ejecutas un archivo bat, el directorio de trabajo es el directorio donde se lanzó" Esto es cierto si el usuario hace clic en el archivo de proceso por lotes en el explorador.

Sin embargo, si se llama a la secuencia de comandos desde otra secuencia de comandos mediante el comando CALL, el directorio de trabajo actual no cambia.

Por lo tanto, dentro de su script, es mejor usar% ~ dp0subfolder / file1.txt

Tenga en cuenta también que% ~ dp0 finalizará con una barra invertida cuando el script actual no se encuentre en el directorio de trabajo actual. Por lo tanto, si necesita el nombre del directorio sin una barra diagonal inversa, puede usar algo como

call :GET_THIS_DIR echo I am here: %THIS_DIR% goto :EOF :GET_THIS_DIR pushd %~dp0 set THIS_DIR=%CD% popd goto :EOF


No es necesario saber dónde están los archivos, porque cuando ejecutas un archivo bat el directorio de trabajo es el directorio donde se lanzó (la "carpeta maestra"), por lo que si tienes esta estructura:

./mydocuments/folder/mybat.bat ./mydocuments/folder/subfolder/file.txt

Y el usuario inicia "mybat.bat", el directorio de trabajo es ". / Mydocuments / folder", por lo que solo necesita escribir el nombre de la subcarpeta en su secuencia de comandos:

@Echo OFF REM Do anything with "./Subfolder/File1.txt" PUSHD "./Subfolder" Type "File1.txt" Pause&Exit

De todos modos, el directorio de trabajo está almacenado en la variable "% CD%", y el directorio donde se lanzó el bate se almacena en el argumento 0. Luego, si desea conocer el directorio de trabajo en cualquier computadora, puede hacer lo siguiente:

@Echo OFF Echo Launch dir: "%~dp0" Echo Current dir: "%CD%" Pause&Exit


Prueba en tu lote

set "batchisin=%~dp0"

que debe establecer la variable a la ubicación de su lote.


También puedes hacer

Pushd "%~dp0"

Lo cual también toma en cuenta la ejecución de una ruta unc.