come discusso in un'altra thread How to avoid cmd.exe interpreting shell special characters like < > ^ non è facile ottenere tutti i parametri dalla riga di comando.Come ricevere anche i più strani parametri della riga di comando?
Un semplice
set var=%1
set "var=%~1"
non sono sufficienti, se si dispone di una richiesta come
myBatch.bat abc"&"^&def
ho una soluzione, ma ha bisogno di un file temporaneo, ed è, inoltre, non a prova di proiettile.
@echo off
setlocal DisableDelayedExpansion
set "prompt=X"
(
@echo on
for %%a in (4) do (
rem #%1#
)
) > XY.txt
@echo off
for /F "delims=" %%a in (xy.txt) DO (
set "param=%%a"
)
setlocal EnableDelayedExpansion
set param=!param:~7,-4!
echo param='!param!'
non riesce con qualcosa come myBatch.bat% un, esso esposizione non il % un
in questa situazione una semplice echo% 1 avrebbe funzionato.
Ovviamente è il ciclo for, ma non so come cambiarlo.
Forse esiste un'altra soluzione semplice.
Non ho bisogno di questo per risolvere un problema reale, ma mi piacciono le soluzioni che sono a prova di proiettile in ogni situazione, non solo nella maggior parte dei casi.
Questo punto è chiaro, è ovvio che abc "&"^& def verranno tradotti in abc "&" & def, ma ancora non può essere gestito con un semplice set "var =% ~ 1" – jeb
L'utente avrebbe quindi bisogno di anticipare quante volte l'argomento è usato nel file batch per aggiungere il giusto livello di escape ad esso. Non è abbastanza usabile, immagino ;-) – Joey