Buscar archivo. batch [Solucionado]

Iniciado por Dany3j, 27 Julio 2011, 23:16 PM

0 Miembros y 1 Visitante están viendo este tema.

Dany3j

Hello. Como busco un archivo.? en el disco C: y abro la carpeta en la que esta o el archivo.?

Por ejemplo.

que al ejecutar el archivo bat me pida el nombre del archivo y al presionar enter lo busque en todo el disco y abra la carpeta. Y si no que me diga el archivo no existe.  :huh:
"Pensando en Batch" XD

leogtz

#1
Esto me funciona bien:

Código (dos) [Seleccionar]
@echo off
:menu
set /p "nombre=Nombre del archivo : "
if not defined nombre (goto:menu)

pushd %homedrive%\
for /f "tokens=*" %%_ in ('dir /b /s /a-d "%nombre%"') do (
call:show "%%_"
popd
exit /b 0
)
:show
echo Archivo encontrado en : %~dp1
explorer %~dp1
goto:eof


Ó así mejor:

Código (dos) [Seleccionar]
@echo off
:menu
set /p "nombre=Nombre del archivo : "
if not defined nombre (goto:menu)

pushd %homedrive%\
for /f "tokens=*" %%_ in ('dir /b /s /a-d "%nombre%"') do (
call:show "%%_"
popd
exit /b 0
)
:show
echo Archivo encontrado en : %~dp1
explorer /select,%~dpnx1
goto:eof


En el segundo código hice una actualización a la línea del explorer

Código (dos) [Seleccionar]
@echo off
:menu
set /p "nombre=Nombre del archivo : "
if not defined nombre (goto:menu)
pushd %homedrive%\
for /r %%_ in (*) do if "%%~nx_"=="%nombre%" explorer /select,"%%~dpnx_
popd
Código (perl) [Seleccionar]

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

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

SuperDraco

#2
Advertencia - mientras estabas leyendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.

>:(




fácil  :P

Código (dos) [Seleccionar]
@echo off


Rem By PiToLoKo
Rem Visita: Foro.ElHacker.Net





:Select
cls

echo ¨Que archivo quieres buscar?
echo+

Set /p FILE=

If not defined file (
echo. Porfavor, introduce el nombre del archivo...
Ping -n 3 localhost >nul
Goto :Select
)





:Search

cls
echo Buscando "%FILE%" en el disco "%Systemdrive%"...
Dir /B /S "%systemdrive%\%FILE%" >"%temp%\file.txt"
If %Errorlevel% EQU 0 (
cls
echo Archivo encontrado:
echo+
Type "%temp%\file.txt"
For /F "Tokens=*" %%a in ('Type "%temp%\file.txt"') do (
"explorer.exe" /select,"%%a"
 )
) ELSE (
cls
echo No se encuentra el archivo "%FILE%"
)




echo.
echo Pulsa una tecla para volver al menu...
pause >nul
Set File=
Goto :Select
No he vuelto, solo estoy de paso.

Dany3j

#3
Leo que funcion tiene goto:eof  :o

He utilizado tu codigo pitoloko. pero no me esta abriendo el archivo file.txt en el que esta guardando lo encontrado solo me abre la ruta donde esta el archivo buscado
"Pensando en Batch" XD

SuperDraco

Cita de: dany3j en 27 Julio 2011, 23:52 PM
que funcion tiene goto:eof  :o

Es una etiqueta para terminar la función del proceso.

Primero se llama a la función, con "CALL", y el call al llegar a la etiqueta "Goto:EOF", vuelve a donde la llamaron, osea, adentro del for, en vez de seguir código hacia abajo...

Seguro que Leo lo explica mucho mejor, pero asi tienes 2 respuestas ale xD
No he vuelto, solo estoy de paso.

leogtz

eof es una etiqueta "especial", significa "END of FILE" y sirve para salir de un ámbito, yo lo utilizo para salir de un "ámbito de etiqueta" y así volver a donde fue llamada la función, también sirve para salir del archivo.

Ejemplo:

Código (dos) [Seleccionar]
@echo off
rem Supongamos que quiero llamar a la etiqueta "hola" y quiero que regrese!, no que se siga con las demás etiquetas:
call:hola
echo Bye

:hola
echo Hola mundo!

:adios
echo Adios!


Y la salida del batch da:

CitarC:\Users\leo>code.cmd
Hola mundo!
Adios!
Bye
Hola mundo!
Adios!

C:\Users\leo>

No pasa lo que yo quiero, pero si agrego goto:eof a las etiquetas:

CitarC:\Users\leo>code.cmd
Hola mundo!
Bye

C:\Users\leo>

Ahora sí pasa lo que quiero, porque se llama a :hola, y luego regresa a donde fue llamado, y luego sale por el goto:eof después del call.

Saludos.
Código (perl) [Seleccionar]

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

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

leogtz

Cita de: dany3j en 27 Julio 2011, 23:52 PM
He utilizado tu codigo pitoloko. pero no me esta abriendo el archivo file.txt en el que esta guardando lo encontrado solo me abre la ruta donde esta el archivo buscado

Tu pediste qu abriera la carpeta, no el archivo, checa tu primer mensaje.
Código (perl) [Seleccionar]

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

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

SuperDraco

#7
Cita de: Leo Gutiérrez. en 28 Julio 2011, 00:01 AM
Tu pediste qu abriera la carpeta, no el archivo, checa tu primer mensaje.

eso, eso!  :¬¬

aunque si con "abrir" te refieres a "mostrar" el "file.txt" con el comando type, entonces si, me habia comido unas comillas, a mi me funcionaba porque tengo el nombre sin espacios,pero tu pc no se, ya está arreglado.

saludosss


PD: mi script es parecido al de Leo, algo más simple y también funciona, pero no es mejor!! el de leo no necesita guardar en un archivo, usa %~dp1, está más elaborado. si se me hubiera ocurrido a mi, casi parecería un plagio jaja

un saludo!
No he vuelto, solo estoy de paso.

Dany3j

ok jajajaja lo que pasa que pitoloko le puso esa función y me pareció extraño que la tuviera, y no la ejecutara aunque si abre la ruta el file.txt no es necesario igual ya esta solucionado... mil GRacias de nuevo A los dos y por la explicacion del  goto:eof ya en varias partes lo había visto y no entendía

Damos por solucionado.  ;-)
"Pensando en Batch" XD

leogtz

Bueno, aquí les dejo esta solución en Powershell, ya es tiempo de que vayamos volteando hacia él:

Código (perl) [Seleccionar]
$file = Read-Host "Archivo a buscar : "
$file.f
Push-Location \
foreach ($archivo in Get-ChildItem -path \users\leo\ -recurse -force)
{
if($archivo.name -eq "$file")
{
explorer $archivo.directory
Pop-Location
Exit-PSSession
}
}
Código (perl) [Seleccionar]

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

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