Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - <ИΘZIЭ(ŦB>

#41
Qué raro! Intenta cambiando el comando TYPE por SORT < "Archivo2.txt". Debería quedarte así:


For /f "useback tokens=*" %%R in ('sort < "Archivo2.txt"') do (ren "Archivo1.txt" "%%R.txt")


Pruébalo así a ver. Sino funciona dime y luego pruebo en la computadora. Ahorita te estoy respondiendo desde el celular.
#42
Una pregunta: tu "archivo2.txt" tiene cuantas líneas? Solo contiene el texto que quieres usar para renombrar el "archivo1.txt", o tiene algo más?
Si tiene una sola se podría hacer como propusiste, pero usando un FOR. Fíjate:


For /f "useback tokens=*" %%R in ('type "Archivo2.txt"') do (ren "Archivo1.txt" "%%R")


Eso funcionaría en caso de que el texto en "Archivo2.txt" ya tenga un nombre válido de archivo con extensión y todo. Si no es así, tendrías que adjuntar la extensión tú:
ren "Archivo1.txt" "%%R.txt"

Ahora bien, debes saber que si "Archivo2.txt" tiene más de una línea de texto el nombre final del "Archivo1.txt" será el de la última línea. Por eso te hacía la pregunta. Ve si te sirve eso.
#43
Scripting / Re: COmo podria'??....... [batch]
9 Noviembre 2009, 03:34 AM
Listo. Después de varias pruebas, este es el que mejor me corrió, aunque debo mencionar que no es 100% efectivo. Una que otra vez pasa por alto algún borrado, pero creo que es inevitable, pues se toma ciertos segundos para verificar, y en eso si casualmente se borra un archivo, puede que no lo registre.
De todos modos quedó bueno.

Lo primero que hace es pedir que se configure la ruta a chequear, la cual queda guardada en Settings.ini, en la misma carpeta, lo que impide que se vuelva a configurar en próximas ejecuciones. En caso de querer cambiarla posteriormente se puede borrar el archivo o modificar la ruta en el mismo (CheckPath).

A partir de entonces el programa queda verificando el contenido de la ruta, y guarda el registro del mismo en Content.log, también en la misma carpeta. Esta solo se actualiza cuando se borra o agrega un archivo en la ruta chequeada. Ahora bien, el programa guarda otro registro en la carpeta %temp% que si se actualiza todo el tiempo. Esa fue la única forma en que logré que la verifiación fuese más efectiva.

Por último, el programa va mostrando en pantalla cada archivo que se borra y a su vez lo guarda un registro llamado DelReg.log, que almacena la fecha y la hora del borrado, junto al nombre del archivo.

Aquí se los dejo. Lo llamé Delete Checker v1.0:

Código (dos) [Seleccionar]

@echo off
cls
title Delete Checker [v1.0] By ^<N0ZI3(FB^>
echo. & echo  Iniciando... & sleep 1
If not exist "%~dp0Settings.ini" (call:Define) else (call:Read)
cls
call:CheckMsj
dir /a /b /s "%checkPath%" >"%~dp0Content.log"
call:List

:List
set match=0
For /f "useback tokens=*" %%R in ("%~dp0Content.log") do (
    set "regValue=%%R"
    If not exist "%%R" call:DelMsj
)
If %match% == 1 (
    call:CheckMsj
    set match=0
    dir /a /b /s "%checkPath%" >"%~dp0Content.log"
)
dir /a /b /s "%checkPath%" >"%temp%\Content.log"
call:Compare
goto List

:Compare
fc /c "%temp%\Content.log" "%~dp0Content.log" >nul
If %errorlevel% == 0 (goto:eof) else (move /y "%temp%\Content.log" "%~dp0Content.log" >nul)
goto:eof

:CheckMsj
echo. & echo  Chequeando (%checkPath%)... & echo.
goto:eof

:DelMsj
If "%time:~0,1%" == " " (set "hora=0%time:~1%") else (set "hora=%time%")
echo   ELIMINADO (%hora%): %regValue%
(echo ELIMINADO ^(%date% %hora%^): %regValue%)>>"%~dp0DelReg.log"
set match=1
goto:eof

:Read
For /f "useback tokens=*" %%R in ("%~dp0Settings.ini") do (set "settValue=%%R")
set "checkPath=%settValue:~10%"
If not exist "%checkPath%" (
    echo. & echo La ruta pre-configurada ya no existe.
    call:Define m
)
goto:eof

:Define
set sender=%1
If not defined sender echo. & echo  Debe configurar el sistema en su primer uso. & echo.
set /p _Path=Indique el disco o directorio a procesar:
If not exist %_Path% call:Define r
For %%s in (%_Path%) do (
    set "checkPath=%%~dpns"
)
(echo CheckPath=%checkPath%)>"%~dp0Settings.ini"
goto:eof


Espero saber si te resulta útil Crisis, y a cualquiera que lo use.
#44
Scripting / Re: COmo podria'??....... [batch]
8 Noviembre 2009, 21:36 PM
Que tal Crisis! Aprovecho que te veo conectado para decirte que sí hay una forma de hacer lo que pides. Hace unos días leí tu pregunta y me dediqué a hallar la manera. Ya logré algo, pero hay unos detalles que estoy terminando. Si te quedas un rato tal vez lo veas; estoy por terminarlo. Espera...
#45
Scripting / Re: problemas en batch
7 Noviembre 2009, 03:50 AM
Ok Leo! Gracias por la sugerencia. Solo lo hago en sentancias simples que  forman parte de una misma función (echo. & echo). Lo tendré en cuenta de todos modos.  :laugh:
#46
Gracias por su interés compañeros, pero nada me ha servido. Pensé que con el WMIC lo obtendría pues tiene muchas opciones, pero ninguna me da la opción de WORKGROUP.
El %USERDOMAIN% me devuelve el nombre de la PC, así que tampoco funcionó.
Es raro que eso sea tan difícil de conseguir.

¿Alguna otra sugerencia?
#47
Scripting / Re: problemas en batch
5 Noviembre 2009, 20:14 PM

@echo off
:Main
echo. & set /p choice=¨Eres tonto (S/N)?:
If not defined choice goto Main
If /i "%choice%" neq "s" If /i "%choice%" neq "n" goto Main
If /i "%choice%" == "n" echo. & echo ­FELICIDADES! ­Ud no es UN TONTO!
If /i "%choice%" == "s" echo. & echo ­QUE HORROR! Ya me lo imaginaba.
pause>nul
cls & goto Main


Prueba ese! Jeje!  ;D
#48
Hola compañeros del foro! Necesito una manita.
Parece algo sencillo, pero por más que busco no encuentro la respuesta. Por eso decidí apelar a vuestra sabiduría nuevamente!  ;D

Se trata de mostrar el nombre del grupo de trabajo de mi red local. El comando NET VIEW me lista los equipos de la misma, pero no el nombre.

¿Existe algún comando para mostrarla por ms-dos? De verdad me hace falta. Gracias.

#49
Qué bueno que te sirviera! Puedo decirte que lo que sé de Batch lo he aprendido solo aquí en el foro y en tan solo unos meses gracias a la ayuda de los compañeros y moderadores que de verdad están dispuestos a ayudar. De modo que me uno a ti en el agradecimiento.

Lo de tus preguntas es muy sencillo.

En primer lugar:
set "line=%%F"

Si te fijas bien, lo que hago en esta línea es crear la variable line con el valor de la variable del FOR (%%F), pues esta última se encarga de extraer el texto de cada línea del archivo que indicaste. Por eso le di el nombre "line" (línea) a esa variable.

For /f "useback tokens=*" %%F in ("%file%") do (
...
set "line=%%F"
...
)


Tu segunda duda:
"!string:~%nchar%,1!"

Bueno, esta línea la uso en la etiqueta :Contar para saber cuántos caracteres (nchar) tiene la palabra que indicaste (string) para buscar en el archivo de texto (file). Si te fijas, esta etiqueta lo que hace es ir sumando nchar hasta que llega al último caracter. Déjame darte algunos ejemplos:

Si tengo la variable "VAR=Hola mundo" y quiero mostrar su valor, solo debo usar un echo:
echo Valor de VAR: "%VAR%"
Se mostraría esto:
Valor de VAR: "Hola mundo"

Ahora, si no quiero ver todo su contenido sino una fracción, por ejemplo, los primeros tres caracteres, haría lo siguiente:
echo Valor fraccionado de VAR: "%VAR:~0,3%"
El primer número indica la posición (0) y el segundo (3) los caracteres que se mostrarán desde esa posición. Así pues, el resultado de esto sería:
Valor fraccionado de VAR: "Hol"

Bueno, no sé si ya conocías ese detalle, pero por si acaso lo expliqué.

Ahora bien, debes haber notado que en mi código original hay algunas diferencias, particularmente respecto a los dos signos de admiración (!) que usé. Esto se debe a que necesitaba usar una variable para determinar la posición, en vez de indicarla directamente con un número. No funcionaría de hacerlo de este modo:
%string:~%nchar%,1%
Ahora bien, debo mencionar que para que puedan usarse estos signos (!) en vez de los porcentajes (%) hay que escribir la línea:
setlocal enabledelayedexpansion
que si ves, usé al principio antes de llamar a la etiqueta :Contar. Eso lo aprendí hace poco, aunque debo confesar que no entiendo bien por qué es necesario. He leído que tiene que ver con unas tales variables retardadas, pero hasta ahí.

Creo que esto abarca lo de tus dudas, y tal vez más... Jaja! Espero que por lo menos hayas quedado claro.
#50
Buenas... Sé que hay muchas maneras sencillas de hacer lo que piden, pero aquí te dejo un .bat que te servirá para eso. Espero les sea útil.

Código (dos) [Seleccionar]

@echo off
:Main
cls
set /p file=Indique el nombre del archivo:
set /p string=Indique la palabra a buscar:
echo.
setlocal enabledelayedexpansion
set /a nchar=0
call:Contar
set /a nlin=0
For /f "useback tokens=*" %%F in ("%file%") do (
     set /a nlin+=1
     set "line=%%F"
     set /a xcont=0
     call:Comparar
)
echo. & echo Terminado. & pause>nul & goto Main

:Contar
If /i "!string:~%nchar%,1!" == "" goto:eof
set /a nchar+=1
goto Contar

:Comparar
If /i "!line:~%xcont%,%nchar%!" == "%string%" (
     set mtch=T
     call:Msj
)
If /i "!line:~%xcont%,%nchar%!" == "" (
     set mtch=F
     call:Msj
     goto:eof
)
set /a xcont+=1
goto Comparar

:Msj
If "%mtch%" == "T" (
     echo PALABRA ENCONTRADA: [LINEA %nlin%] %line% & echo.
     call:Choice
)
If "%mtch%" == "F" echo LINEA %nlin%: %line%
goto:eof

:Choice
set /p ch=¨Continuar la b£squeda (S/N)?:
If not defined ch goto Choice
If /i %ch% == s goto:eof
If /i %ch% == n goto Main
goto:eof