2010-08-04 12 views

risposta

6

È possibile ottenere qualcosa di simile utilizzando una variante del comando for:

FOR /F "usebackq tokens=*" %%a IN (`subcommand`) DO @command %%a 

Una grande differenza (oltre ad essere più brutto poco intuitivo e molto) è che sarà eseguire command una volta per ogni linea di prodotto da subcommand

Si noti che all'interno di un file di script, i segni di percentuale devono essere raddoppiati (utilizzare segni di percentuale non raddoppiati se si ha motivo di volerlo fare da riga di comando).

+3

L'usebackq non è realmente necessario (è possibile utilizzare invece le virgolette singole): 'per/f" token = * "% f in ('sottocomando') do @ (comando"% f ")' (Mi piace utilizzare le parentesi con istruzioni condizionali in "batch" in modo da poter aggiungere facilmente più istruzioni al "corpo") – bambams

1

Nel complesso, no. Il prompt dei comandi di Windows in realtà non è una gran parte di una shell in quanto non fornisce molte funzionalità a sé stante, indipendentemente dai comandi che è possibile eseguire. Ad esempio, nella maggior parte delle shell Un * x, il globbing dei file (corrispondente a foo.* in un elenco di file) viene gestito dalla shell stessa. In Windows, ogni applicazione vede il foo.* dalla riga di comando e deve implementare il globbing dei file da solo.

Se si sta spostando verso il basso la strada di cercare di automatizzare di Windows, o vuole un guscio più completo, si dovrebbe considerare l'utilizzo di PowerShell, che fa farvi fare sotto-comandi:

comando (sottocomando)

+0

PowerShell ha molte altre funzionalità mancanti, alcune delle quali supportano cmd.exe. Ad esempio, &&, ||, <, supporto stderr ragionevole, ecc ... Ho provato a passare, ma alla fine ho rinunciato. Non puoi essere felice con una shell "nativa" in Windows. Installa una shell simile a UNIX (Cygwin o MSYS), o meglio ancora, esegui una VM GNU/Linux.^_^ – bambams

+0

Una delle cose più complicate di PowerShell (per me) era la nuova sintassi ... è molto diversa dalla shell DOS, o bash/tcsh, o perl. In particolare, PowerShell ha "-and" e "-or" piuttosto che "&&" o "||" e gestisce effettivamente il reindirizzamento molto bene. Vedi "help about_logical_operator" o "help about_redirection" per tutti i dettagli. – JaredReisinger

+0

Grazie per il commento. Dovrò esaminare "-and" e "-or". Quando l'ho usato per l'ultima volta ho fatto del mio meglio per cercare e tutte le fonti sembravano dire che non era ancora supportato (ma era nella lista). Forse hanno implementato quelli "di recente"? In ogni caso, è ritardato per usare quello che sembra un'opzione di comando invece di caratteri speciali ... Per quanto riguarda il reindirizzamento, IMHO penso che sia inutilmente complesso usare gli oggetti invece del testo. Potrebbe rendere alcune interfacce di processo più efficienti, ma al costo di mantenere interfacce aggiuntive. La complessità è inutile. – bambams