BandaAncha.eu

Comunidad de usuarios
de fibra, móvil y ADSL

Modificar .bat para ejecutarlo desde otra ubicación

BocaDePez
BocaDePez

Hola, a ver si algun@ teneis la solución para este problema: Tengo este archivo bat:

@echo off
FOR %%a IN (0 1 2 3 4 5 6 7 8 9) DO FOR %%b IN (0 1 2 3 4 5 6 7 8 9) DO FOR %%c IN (0 1 2 3 4 5 6 7 8 9) DO IF EXIST "log.txt" REN "log.txt" log%%a%%b%%c.txt

Lo que hace este bat es renombrar el archivo log.txt que se crea cada día. Lo renombra en cada inicio de sesión añadiéndole una secuencia numérica ascendente al nombre. Funciona bien, pero el bat tiene que estar en la misma carpeta donde está el log.txt. ¿Alguien sabe como seria el bat para poder ejecutarlo desde otra ubicación? Ya he probado a insertar la ruta completa del log entre las comillas pero no funciona.

BocaDePez
BocaDePez

No sería...

FOR %%a IN (0 1 2 3 4 5 6 7 8 9) DO FOR %%b IN (0 1 2 3 4 5 6 7 8 9) DO FOR %%c IN (0 1 2 3 4 5 6 7 8 9) DO IF EXIST "C:\carpeta\log.txt" REN "C:\carpeta\log.txt" "C:\carpeta\log%%a%%b%%c.txt"

🗨️ 2
BocaDePez
BocaDePez

eso parece lo logico, pero no funciona.

🗨️ 1
BocaDePez
BocaDePez

Creo que le sobra la última ruta:

FOR %%a IN (0 1 2 3 4 5 6 7 8 9) DO FOR %%b IN (0 1 2 3 4 5 6 7 8 9) DO FOR %%c IN (0 1 2 3 4 5 6 7 8 9) DO IF EXIST "C:\carpeta\log.txt" REN "C:\carpeta\log.txt" log%%a%%b%%c.txt

vukits
-1

bat ya no se lleva.

debería probar en powershell

pcmaster

Dentro del .bat, cambia el directorio con la orden CD, para ponerte en el directorio donde está el archivo.

🗨️ 3
BocaDePez
BocaDePez

Si

@echo off

cd c:/carpeta
FOR %%a IN (0 1 2 3 4 5 6 7 8 9) DO FOR %%b IN (0 1 2 3 4 5 6 7 8 9) DO FOR %%c IN (0 1 2 3 4 5 6 7 8 9) DO IF EXIST "log.txt" REN "log.txt" log%%a%%b%%c.txt

BocaDePez
BocaDePez

Efectivamente asi funciona. Gracias.

🗨️ 1
BocaDePez
BocaDePez

bueno, queria responder a pcmaster, pero con las prisas tengo un duende en el ordenata.

NetVicious

Si quieres también puedes poner el bat justo donde está el archivo log y utilizando alias %~dp0 lo tienes también hecho.

%~dp0 = Ruta completa donde está el propio bat que se está ejecutando.

@echo off
FOR %%a IN (0 1 2 3 4 5 6 7 8 9) DO FOR %%b IN (0 1 2 3 4 5 6 7 8 9) DO FOR %%c IN (0 1 2 3 4 5 6 7 8 9) DO IF EXIST "%~dp0\log.txt" REN
"%~dp0\log.txt" "%~dp0\log%%a%%b%%c.txt"
BocaDePez
BocaDePez

¿Y si haces "cd <dir>"?

🗨️ 3
BocaDePez
BocaDePez

No vi el resto de comentarios después de la publi, pfff. Me repetí.

AsmGuy

En un CMD o un BAT no es buena práctica hacer un "cd <dir>" y dejarlo allí.

Al final de la ejecución deberías quedarte en la carpeta donde estabas antes de comenzar.

Usa:

pushd <dir>

...
...
...

popd
🗨️ 1
BocaDePez
BocaDePez

No hay problema porque la orden por la que he preguntado no es la última, está añadida a un bat que se ejecuta al iniciar sesión y que tiene en total 18 órdenes. Todo está bien.