|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Jul 2012
Messaggi: 126
|
[BATCH] assegnare ad una variabile l'output di una riga di comando
Ciao.
Avrei bisogno di assegnare ad una variabile l'output della riga di comando Codice:
CERTUTIL -hashfile %1 | FINDSTR /v Hash | FINDSTR /v CertUtil C'è un sistema più semplice dell'inserire la riga di comando in un loop FOR /f ? ![]() Grazie. |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Feb 2009
Città: Modena
Messaggi: 234
|
Perché dovresti passare la linea di comando a un for /f?
Non puoi passare direttamente il primo parametro, visto che è l'unico che usi? Comunque io vengo da bash, di cmd conosco davvero poco. a te servirebbe quello he in bash è la command substitution es facendo Codice:
contenuto_cartella=$(ls) echo $contenuto_cartella Codice:
file1 file2 file3
__________________
Alice 20 Mega ??? in fast, Speedtest: down 12.71Mbps, Up 1,01 Mbps, ping 17ms, Pingtest: ping 19ms, jitter 6ms packet loss 0%, MOS4.39 Dell L501X Core i5 560M, 8GB Corsair DDR3, Samsung 840 PRO 256GB, grafica NVidia GT 420M |
![]() |
![]() |
![]() |
#3 | |
Member
Iscritto dal: Jul 2012
Messaggi: 126
|
Quote:
![]() Il senso della mia domanda è proprio questo: come si fa, in batch, a dire "prendi l'output di questa riga e assegnalo alla variabile X" ? ![]() |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: May 2005
Messaggi: 8697
|
Puoi usare un file temporaneo in alternativa al FOR
Codice:
: x_Master_x @ECHO OFF ECHO MYCOMMAND > "%TEMP%\Temp.txt" SET /P VARIABLE=<"%TEMP%\Temp.txt" DEL "%TEMP%\Temp.txt" ECHO %VARIABLE% PAUSE
__________________
. Thread Ufficiali: EasyCrypt ~ Old Files Manager ~ OSD Clock The real me is no match for the legend . |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Jul 2012
Messaggi: 126
|
Si, ok, funziona
![]() Però, anche questo, sa un po' di workaround. Mi interessava capire se esiste un sistema "diretto" per assegnare ad una variabile il valore in uscita di una riga di comando, oppure se questo è uno dei (tanti) limiti di questo linguaggio di script. ![]() |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: May 2005
Messaggi: 8697
|
Non mi risulta nessun comando del genere altrimenti l'avrei scritto.
__________________
. Thread Ufficiali: EasyCrypt ~ Old Files Manager ~ OSD Clock The real me is no match for the legend . |
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Feb 2009
Città: Modena
Messaggi: 234
|
A consumo dei posteri:
c'è l'operatore () che è simile al bash $() cmd: Codice:
set var=(dir) %var% Codice:
var=$(ls) echo $var Codice:
$var=(dir) ## oppure $var = (dir) echo $var # oppure $var
__________________
Alice 20 Mega ??? in fast, Speedtest: down 12.71Mbps, Up 1,01 Mbps, ping 17ms, Pingtest: ping 19ms, jitter 6ms packet loss 0%, MOS4.39 Dell L501X Core i5 560M, 8GB Corsair DDR3, Samsung 840 PRO 256GB, grafica NVidia GT 420M Ultima modifica di DavideDaSerra : 28-08-2015 alle 20:07. |
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: Apr 2011
Città: Roma
Messaggi: 168
|
Non si puo'. Setta la variabile ma poi la perde...
prova da riga di comando: Codice:
echo pluto | (set/p "var=" && call echo %var%) Codice:
C:\Users\ACER>echo pluto | (set/p "var=" && call echo %var%) pluto |
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: Feb 2009
Città: Modena
Messaggi: 234
|
non ho ben capito cosa volessi fare.
volevi assegnare 'pluto' a var o ho capito male? l'operatore () (da quello che ho capito) restituisce sotto forma di stringa l'output del comando che ci metti dentro, tu dentro ci setti una variabile che (nella mia mentalità unix) è un'operazione eseguita da un processo 'figlio' che non ha variabili in comune col padre (se non quelle esportate), in windows non so se sia così ma mi sembra plausibile. Da le variabili sono interne al singolo processo e un processo figlio le eredita per copia, dunque quello che il figlio modifica resta modificato nel figlio. io () lo leggo come 'esegui quello che hai dentro e caccia fuori il risultato come stringa' edit: ho googlato un po' e ho trovato che in windows non c'è l'equivalente dell'export in linux. -> in windows il 'figlio' vede le variabili del padre ma le modifiche fatte dai figli non passano al padre. Devi passarle per forza con l'exit value, se puoi fare la return di un oggetto ok, altrimenti devi usare un oggetto condiviso (io userei un file)
__________________
Alice 20 Mega ??? in fast, Speedtest: down 12.71Mbps, Up 1,01 Mbps, ping 17ms, Pingtest: ping 19ms, jitter 6ms packet loss 0%, MOS4.39 Dell L501X Core i5 560M, 8GB Corsair DDR3, Samsung 840 PRO 256GB, grafica NVidia GT 420M Ultima modifica di DavideDaSerra : 02-09-2015 alle 13:39. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:02.