Come faccio a evadere dalle e commerciali in file batch?

Come faccio a uscire da e commerciali in un file batch (o dalla riga di comando di Windows) per utilizzare il comando di start per aprire pagine Web con e commerciali nell’URL?

Le virgolette non funzioneranno con start ; questo invece avvia una nuova finestra della riga di comando.

Aggiornamento 1 : la soluzione di Wael Dalloul funziona. Inoltre, se ci sono caratteri con codifica URL (ad esempio spazio è codificato come% 20) nell’URL e si trova in un file batch, allora ‘%’ deve essere codificato come ‘%%’. Questo non è il caso dell’esempio.

Esempio, dalla riga di comando ( CMD.EXE ):

 start http://www.google.com/search?client=opera&rls=en&q=escape+ampersand&sourceid=opera&ie=utf-8&oe=utf-8 

risulterà in

 http://www.google.com/search?client=opera 

essere aperto nel browser predefinito e questi errori nella finestra della riga di comando:

 'rls' is not recognized as an internal or external command, operable program or batch file. 'q' is not recognized as an internal or external command, operable program or batch file. 'sourceid' is not recognized as an internal or external command, operable program or batch file. 'ie' is not recognized as an internal or external command, operable program or batch file. 'oe' is not recognized as an internal or external command, operable program or batch file. 

Piattaforma: Windows XP 64 bit SP2.

Da un cmd :

  • & è ejar in questo modo: ^& (basato sulla risposta di @Wael Dalloul)
  • % non ha bisogno di essere sfuggito

Un esempio:

 start http://www.google.com/search?client=opera^&rls=en^&q=escape+ampersand%20and%20percentage+in+cmd^&sourceid=opera^&ie=utf-8^&oe=utf-8 

Da un file batch

  • & è ejar in questo modo: ^& (basato sulla risposta di @Wael Dalloul)
  • % è fuggito in questo modo: %% (basato sull’aggiornamento OP)

Un esempio:

 start http://www.google.com/search?client=opera^&rls=en^&q=escape+ampersand%%20and%%20percentage+in+batch+file^&sourceid=opera^&ie=utf-8^&oe=utf-8 

& è usato per separare i comandi. Quindi puoi usare ^ per sfuggire al & .

Puoi racchiuderlo tra virgolette, se fornisci un primo argomento fittizio.

Si noti che è necessario fornire un primo argomento fittizio in questo caso, poiché start tratterà il primo argomento come un titolo per le nuove windows della console, se è quotato. Quindi il seguente dovrebbe funzionare (e lo fa qui):

 start "" "http://www.google.com/search?client=opera&rls=en&q=escape+ampersand&sourceid=opera&ie=utf-8&oe=utf-8" 
 explorer "http://www.google.com/search?client=opera&rls=...." 

Il comando

 echo this ^& that 

funziona come previsto, producendo

 this & that 

Il comando

 echo this ^& that > tmp 

funziona anche, scrivendo la stringa sul file “tmp”. Tuttavia, prima di un tubo

 echo this ^& that | clip 

il ^ è interpretato in modo completamente diverso. Prova a scrivere l’output dei due comandi “echo this” e “that” alla pipe. L’eco funzionerà quindi “quel” darà un errore. Detto

 echo this ^& echo that | clip 

metterà le stringhe “questo” e “quello” negli appunti.

Senza il ^:

 echo this & echo that | clip 

il primo eco scriverà sulla console e solo la seconda uscita dell’echo verrà reindirizzata alla clip (analogamente per il reindirizzamento “> tmp”). Quindi, quando l’output viene reindirizzato, il simbolo ^ non cita il carattere & ma lo fa invece applicare prima del reindirizzamento anziché dopo.

Per tubare un &, devi citarlo due volte

 echo this ^^^& that | clip 

Se metti la stringa in una variabile

 set m=this ^& that 

poi

 set m 

uscirà

 m=this & that 

ma l’ovvio

 echo %m% 

fallisce perché, dopo che Windows sostituisce la variabile, risultante in

 echo this & that 

lo analizza come un nuovo comando e tenta di eseguire “quello”.

In un file batch, è ansible utilizzare l’espansione ritardata :

 setlocal enableDelayedExpansion echo !m! 

Per l’output in una pipe, dobbiamo sostituire tutti & s nel valore della variabile con ^ &, cosa che possiamo fare con la syntax% VAR: FROM = TO%:

 echo !m:^&=^^^&! | clip 

Sulla riga di comando, “cmd / v” abilita l’espansione ritardata:

 cmd /v /c echo !m! 

Funziona anche quando si scrive su una pipe

 cmd /v /c echo !m! | clip 

Semplice.

Se hai bisogno di echo una stringa che contiene una e commerciale le citazioni non saranno d’aiuto, perché le vedresti anche sull’output. In tal caso, utilizzare for :

 for %a in ("First & Last") do echo %~a 

… in uno script batch:

 for %%a in ("First & Last") do echo %%~a 

o

 for %%a in ("%~1") do echo %%~a 

Aggiungendo questo per utenti futuri –

SE hai spazi nel nome del file E hai un personaggio che devi sfuggire: puoi usare virgolette singole e doppie per evitare errori nel comando.

scp ./'files name with spaces/internal folder with spaces/"text & files stored.txt"' .

Il carattere ^ sfugge altrimenti alle virgolette

modificato per includere la chiusura . alla fine del comando