¿Cómo comprobar si el archivo por lotes actual está en una carpeta específica?

¿Cómo comprobar si el archivo por lotes actual está en una carpeta específica?

Hola, soy bastante nuevo en el mundo de los archivos por lotes. Lo siento si esta pregunta parece estúpida, pero realmente necesito ayuda.

Entonces necesito mi secuencia de comandos por lotes para verificar si está en una carpeta específica, digamos, %userprofile%\Desktoppor ejemplo. No quiero que se preocupe por su propio nombre de archivo. No tengo absolutamente ninguna idea de por dónde empezar. Sé cómo obtener la ruta/nombre de archivo actual, etc., pero eso es todo lo que sé. ¿Cómo hago para que el programa compare su ruta actual con la ruta en la que quiero ver si se encuentra? ¿O existe otro método más eficiente?

Lo que quiero lograr es así:

if this file is in Desktop folder(
    echo It's here
)else(
    echo It's not here
)

Cualquier ayuda es apreciada, gracias a todos.

Respuesta1

No es necesario que te disculpes porque la pregunta que planteaste es más complicada de lo que probablemente esperas.

Solución

Así es como puedes probar que tu archivo por lotes esté ubicado en una carpeta específica, en tu caso en la carpeta Escritorio:

@echo off

:: Normalize this batch script's path
set BATCH_PATH=%~dp0
set BATCH_PATH=%BATCH_PATH:~0,-1%

:: Test for equality
if "%BATCH_PATH%"=="%USERPROFILE%\Desktop" (
    echo This file is on Desktop.
) else (
    echo This file is not on Desktop.
)

Cosas a tener en cuenta

  • Una forma alternativa de normalizar la ruta (y mi favorita) es:

    pushd "%~dp0"
    set BATCH_PATH=%CD%
    popd
    
    • en cualquier caso, probablemente quieras eliminar cualquier rastro \, que es una de las cosas que la normalización hace por ti.
  • use %~dp0variable en lugar de %cd%, porque la última semántica esla carpeta en la que operan sus scriptsmientras que el primero esla carpeta en la que se encuentra su script(que es lo que pediste)

    • %0le da la ubicación de su secuencia de comandos por lotes
    • agregando dp(es decir %dp0) usted solicitadiscoycaminoque omite el nombre del archivo y la extensión (que es algo así como example.baty sería una carga en el siguiente paso: verificación de igualdad)
    • al agregar, ~solicita eliminar cualquier apertura o cierre "si es necesario (es decir, la ruta contenía espacio)
  • Las rutas están empaquetadas "para evitar errores debido a un posible espacio en la cadena de ruta.


No es tan simple como uno podría pensar, ¿verdad?

Respuesta2

Ejemplo de trabajo mínimo usando %cd%:

IF %cd%==%userprofile%\Desktop (
    ECHO It's here
) ELSE (
    ECHO It's not here
)

Usando variable intermedia:

FOR /F "tokens=*" %%a in ('cd') do SET CURRENT_DIR=%%a
IF %CURRENT_DIR%==%userprofile%\Desktop (
    ECHO It's here
) ELSE (
    ECHO It's not here
)

Como dijiste que no tienes idea de por dónde empezar, aquí tienes un buen material de lectura: https://en.wikibooks.org/wiki/Windows_Batch_Scripting

información relacionada