PDA

View Full Version : [batch]Scelta casuale di un numero


skeleton
23-09-2009, 13:08
Salve a tutti,
il mio problema è facile da descrivere:
ho un file .txt che contiene su ogni riga un testo tipo J1 ecc. bene io vorrei che con un comando il batch scelga a caso una riga e che la sciva tramite echo, poi crei un altro file contenente tutte le righe tranne quella scelta precedentemente.

Potrebbe essere possibile???

Grazie.

skeleton
24-09-2009, 17:36
up:stordita:

zuper
25-09-2009, 08:42
tecnicamente potrebbe essere fattibile
anche se dos ha una gestione un po riduttiva soprattutto per il cercare precisamente il numero di riga all'interno di un text file...

dovresti "approntare" il file con dei numeri davanti tipo:

001:ciao
002:prova
ecc
ecc

:)

poi tramite questo comando

echo %random:~-3%

tirare fuori un numero di 3 cifre....
a quel punto con un FIND "001:" trovi la stringa che ti interessa

e con FIND /V trovi tutte le altre....e le rilogghi su un nuovo file :)

skeleton
25-09-2009, 13:22
Grazie per la tua risposta, ma non mi sono chiare alcune cose:

-con il comando find mi trova solo il numero a 3 cifre, mente io vorrei che mi trovasse ciò che è scritto nella riga che contiene il %random% e mi mandasse in echo solo ciò che c'è in qualla riga, tranne il numero.

Io ho provato a risolvere così:

set nom=%random:~-2%
for /f "token=%nom% delims=" %%i in (333.txt) do set num=%%i
set cr=%num:~2%
echo %cr%

e il file 333.txt contiene questo:
J1
J2
J3

Il problema di questo codice è che mi dà token non atteso e che le righe all'interno del file sono 52, non 99.

Chiedo aiuto.

zuper
25-09-2009, 14:31
attendi se passa john revelator :)

lui con la powershell ci mette un secondo...

con il dos nudo e crudo la vedo molto difficile...

skeleton
25-09-2009, 14:51
Proprio non si può fare??? Perchè questi comandi dovrei integrarli ad altro codice ms-dos...:help:

zuper
25-09-2009, 15:29
il file di partenza deve essere di questo tipo

01:J1
02:J2
03:J3

ecc ecc...

allora:

:prova
set num=%random:~-2%
if %num% LSS 53 (
FINDSTR /B %num%: cia.txt > file_linea.txt
FINDSTR /B /V %num%: cia.txt > file_no_linea.txt
) ELSE (
goto prova
)

zuper
25-09-2009, 16:39
oppure se vuoi essere sicuro che comunque estragga una linea

cls
:prova
set num=%random:~-2%
FINDSTR /B %num%: cia.txt > file_linea.txt
if %ERRORLEVEL% EQU 0 (
FINDSTR /B /V %num%: cia.txt > file_no_linea.txt
) ELSE (
goto prova
)

zuper
25-09-2009, 16:55
echo off
cls
:prova
set num=%random:~-2%
FINDSTR /B %num%: cia.txt > file_linea.txt
if %ERRORLEVEL% EQU 0 (
FINDSTR /B /V %num%: cia.txt > file_no_linea.txt
copy file_no_linea.txt cia.txt >NUL
set /p code="" <file_linea.txt
set codice=%code:~3%
echo %codice%
) ELSE (
goto prova
)

skeleton
25-09-2009, 17:06
Grazie mille per l'immenso lavoro, ma eseguendo l'ultimo codice che mi hai dato (quello che rispecchia esattamente quello che voglio fare) mi dice "echo disattivato"...io non riesco a risolvere...

Qualcuno sa aiutarmi???:help:

Rsk
25-09-2009, 18:24
echo off
cls
:prova
set num=%random:~-2%
FINDSTR /B %num%: cia.txt > file_linea.txt
if %ERRORLEVEL% EQU 0 (
FINDSTR /B /V %num%: cia.txt > file_no_linea.txt
copy file_no_linea.txt cia.txt >NUL
set /p code="" <file_linea.txt
set codice=%code:~3%
echo on
echo %codice%
) ELSE (
goto prova
)


Cosi?

skeleton
25-09-2009, 19:17
Mi dispiace, ma così non funziona:doh: .

zuper
25-09-2009, 22:33
a me va senza problemi :boh:

skeleton
26-09-2009, 12:26
Risolto:read: così:

echo off
cls
:prova
set num=%random:~-2%
FINDSTR /B %num%: cia.txt > file_linea.txt
if %ERRORLEVEL% EQU 0 (goto file) else (goto prova)
:file
FINDSTR /B /V %num%: cia.txt > file_no_linea.txt
copy file_no_linea.txt cia.txt >NUL
for /f "delims=" %%i in (file_linea.txt) do set code=%%i
set codice=%code:~3%
echo %codice%
:end


Grazie al vostro immenso:sofico: aiuto, ciao:Prrr:

:ciapet: