-> Programación BATCH Avanzada. (nuevo)

Iniciado por sirdarckcat, 24 Julio 2006, 10:01 AM

0 Miembros y 10 Visitantes están viendo este tema.

leogtz

Dentro de los ciclos FOR, siempre debes de tratar las variables con los caracteres !!

Prueba así:
Código (dos) [Seleccionar]

@echo off
setlocal enabledelayedexpansion
echo             =========================================
echo             =                                                                                       =
echo             =             Renamer                                                             =
echo             =                                                                                       =
echo             =========================================




:data


set /p Historia=Escriba el numero de historia:

set /p Ojo=Escriba el tipo de ojo:

echo             =========================================
echo               Los datos son correctos?    
echo               Numero de historia: %Historia%     
echo               Tipo de ojo: %Ojo%     
echo             =========================================

set /p respuesta=1 es Si, 2 es NO:

if %respuesta% EQU 1 (goto :renombrar) else (goto :data)




:renombrar
set  contador=0


for /F "tokens=1,4*" %%i in ('dir') do (
                         set /a contador=!contador!+1

echo  %%j %%k !Historia!_%Ojo%_!contador!_%%i.txt
)


pause
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

robrey26604

#121
Tengo el siguiente código para encontrar y borrar farchivos que no se pueden borrar porque quedaron enganchados
Código:
Código (dos) [Seleccionar]
@echo off
echo Este programa borra archivos que no se dejan borrar porque
echo quedaron enganchados,por ejemplo videos, etc.
set /p archivo="Nombre del Archivo>>"
rem Roberto Fernández Rey
for %%i in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
dir /b %%i:\ > nul 2>&1 && (
for /f "tokens=*" %%_ in ('dir /b /s %%i:%archivo%') do (if exist %%_ (
taskkill /f /im explorer.exe && (del /f /q "%%_") && (start explorer.exe)))))
exit /b 0

el código busca el archivo y lo elimina pero sucede que no puedo quitar la flash de F: a no ser que le aplique manualmente taskkill al explorer.exe y despues start una vez mas.

que será?

gracias

leogtz

¿A qué te refieres con "enganchados"?

¿La flash?

¿Cómo?

Explicate mejor.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

robrey26604

Gracias Leo por tu tiempo y ayuda.

Me refiero a enganchado a que cuando traté de liberar la flash para desconectarla de forma segura, me indicó que estaba un proceso en curso en ella y por eso no podia ser liberada y que tenia que ver con el explorer. Pienso que puede ser un problema de tiempo, que al aplicar taskkill y no dar un tiempo para eso puede provocar problemas, mi máquina no es muy rápida que digamos, esa es una idea mia pero no estoy seguro de este razonamiento. Cuando le di taskkill, manualmente y start al explorer (manualmente) el proceso terminó y pude sacar la flash. El video que queria borrar estaba en el disco duro y en la flash.

Gracias.






leogtz

Pueden ser muchas cosas, desde el explorador que esté usando la memoria, o simplemente te encuentres con CD o chdir en la memoria.

Coloca el código.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

FJPPitta

Hola que tal,

estaba revisando el post ya que estoy haciendo un batch para comprimir archivos con el 7zip d forma que me comprima cada documento en un archivo .7z separado, el caso es que tengo el problema que el nombre de archivo lo arrastra con la extension, si tengo:

documento.doc

le aplico el batch y queda

documendo.doc.7z

como puedo quitar el .doc del comprimido, para comprimir uso:

for %%a in (*.wad) do "%MYFILES%\7z.exe" a -t7z "%%a".7z "%%a" -mx9 -bd

vi que en un ejemplo pueden quitar lo ultimos 3 caracteres de una variable pero no me funciona, saben como podria hacerle ya sea en esa linea o despues de la ejecución del comando.

Tambien quisiera saber si es posible agregar un log de tiempo a cada archivo comprimido para que dentro de mi 7z tenga documento.doc y fecha.log, el .log creado al momento de la ejecución del .bat


De antemano gracias
Saludos
FJPPittta

leogtz

Intenta así:

Código (dos) [Seleccionar]
for %%a in (*.wad) do (
"%MYFILES%\7z.exe" a -t7z "%%~na".7z "%%a" -mx9 -bd
)
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

FJPPitta

Muchas gracias Leo Gutierrez funciona a la perfección habia intentado ponerle el ~n pero lo hacia %%a~n por eso no quedaba.

Que buena solución

Saludos y buen día
Saludos
FJPPittta

FJPPitta

Ya entrando en mas detalles tengo una duda que me inquieta, es posible hacer un  barrido de letra por letra del nombre de un fichero algo así como que de un archivo abcd.txt me indique las letras exisentes a b c d y pueda hacer un cambio similar a a=1, b=2 c=3 d=4 y luego renombrar automaticamente a 1234.txt o si el archivo se llama bcda.txt se renombre a 2341.txt

Saludos y gracias por la información del post, ha sido realmente muy valiosa para automatizar algunas de mis tareas diarias.
Saludos
FJPPittta

leogtz

Cita de: FJPPitta en 20 Julio 2010, 23:55 PM
Ya entrando en mas detalles tengo una duda que me inquieta, es posible hacer un  barrido de letra por letra del nombre de un fichero algo así como que de un archivo abcd.txt me indique las letras exisentes a b c d y pueda hacer un cambio similar a a=1, b=2 c=3 d=4 y luego renombrar automaticamente a 1234.txt o si el archivo se llama bcda.txt se renombre a 2341.txt

Saludos y gracias por la información del post, ha sido realmente muy valiosa para automatizar algunas de mis tareas diarias.

code.bat
Código (dos) [Seleccionar]
@echo off
setlocal enabledelayedexpansion
rem Checar si el usuario usó bien el .bat
if ["%1"]==[""] (
echo Error con argumentos.
exit /b 1
)
rem Checar si el archivo existe:
if not exist "%1" (exit /b 1)
set "word=%~n1";
set "temp=%word%";
rem Calcular la longitud de cadena y almacenarlo en una variable
set /a contador=0
:loop
if not defined word (goto:end)
set "word=%word:~1%";
set /a contador+=1
goto:loop
:end
set /a contador-=1
set "final=";
for /l %%_ in (0, 1, %contador%) do (
call:alpha !temp:~%%_, 1!
set "final=!final!!alpha!";
)
ren "%1" "%final%.txt"
goto:eof
:alpha
set /a contador=0
for %%_ in (
a b c d e f g h i j k l m n o p q r s t u v w x y z
) do (
set /a contador+=1
if "%1"=="%%_" (
set "alpha=!contador!";
)
)
goto:eof



C:\>echo.> abcd.txt

C:\>dir /b *.txt
abcd.txt

C:\>code.bat abcd.txt

C:\>dir /b *.txt
1234.txt

C:\>
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com