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%\Desktop
por 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.
- en cualquier caso, probablemente quieras eliminar cualquier rastro
use
%~dp0
variable 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)%0
le 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í comoexample.bat
y 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