Re: Jak przekazać -F\" jako argument skryptu cmd?

Autor: Grzegorz Niemirowski <gnthexfiles_at_poczta.onet.pl>
Data: Wed, 25 Apr 2012 01:10:44 +0200
Message-ID: <jn7c6m$efa$1@news.icpnet.pl>
Content-Type: text/plain; format=flowed; charset="iso-8859-2"; reply-type=response

XYZ <junk_at_mail.bin> napisał(a):
> Hej,
> Bezskutecznie próbuję przekazać ciąg -F\" jako argument skryptu cmd.
> Próbowałem escape'ować na różne sposoby:
> -F^\^"
> -F^\"
> -F\^"
> ale cudzysłów wciąż powoduje włączenie całego tekstu następującego
> później.
> Chciałbym, żeby przy przykładowym wywołaniu skryptu jako
> test.cmd problematycznyCiag dalszyTekst
> w jego środowisku było
> %1=-F\"
> %2=dalszyTekst
> Dzięki za pomoc!

Sam bym się chętnie dowiedział... Z googlania i eksperymentów wychodzi mi,
że się nie da. cmd generalnie nie zachowuje się intuicyjnie i ma dosyć
dziwny sposób działania. Dotyczy to też ograniczników ciągu znaków. Otóż
cudzysłowy nie tylko mówią odkąd dokąd jest tekst, ale też same są jego
częścią. Znaczenie mają też spacje. Można się o tym przekonać np. tak:
C:\Users\Grzegorz\Desktop>echo "a"
"a"

C:\Users\Grzegorz\Desktop>echo "a"
 "a"

C:\Users\Grzegorz\Desktop>echo a
 a

C:\Users\Grzegorz\Desktop>echo a
a

Jak widać, cudzysłowy trafiają do polecenia echo, trafia do niego też druga
spacja po echo. Powłoka więc sprawia wrażenie, że niczego tu nie parsuje.
Jakiekolwiek inteligentne działanie można zauważyć np. przy rozwijaniu
zmiennych, ewentualnie przy kilku argumentach.
Znaki specjalne niby są eskejpowane za pomocą daszka, ale jakoś z
cudzysłowami to nie działa:
C:\Users\Grzegorz\Desktop>echo ""
""

C:\Users\Grzegorz\Desktop>echo ^"^"
""

Proponowałbym generalnie przesiadkę na PowerShell i danie sobie spokoju z
przedpotopowym CMD:

PS C:\Users\Grzegorz\Desktop> ./b.ps1 "-F\`"" "dalszyTekst"
Arg: -F\"
Arg: dalszyTekst
PS C:\Users\Grzegorz\Desktop> gc .\b.ps1
foreach ($arg in $args){ Write-Host "Arg: $arg";}

-- 
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 0 days, 2 hours, 38 minutes and 47 seconds 
Received on Wed 25 Apr 2012 - 01:20:03 MET DST

To archiwum zostało wygenerowane przez hypermail 2.2.0 : Wed 25 Apr 2012 - 01:42:02 MET DST