The for
komenda powinna dać ci to, co chcesz:
for /f "tokens=1,2*" %%a in ("%*") do echo command -Duser=%%a -Dpwd=%%b %%c
Z pomocą dla for
(for /?
):
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
byłoby analizować każdy wiersz w pliku mojplik.txt, ignorując wiersze, które zaczynają się w średnik, przechodząc drugi i trzeci token z każdej linii do ciała , z tokenami oddzielonymi przecinkami i/lub spacjami. Zauważ, że dla instrukcji odwołanie do treści ciała% i, aby uzyskać 2. token,% j, aby uzyskać trzeci token , a% k, aby uzyskać wszystkie pozostałe tokeny po trzecim. W przypadku nazw plików zawierających spacje należy podać nazwy plików za pomocą cudzysłowów . Aby w ten sposób używać podwójnych cudzysłowów, musisz także użyć opcji usebackq, w przeciwnym razie podwójne cudzysłowy będą interpretowane jako definicje literału do przeanalizowania.
Więc w moim rozwiązaniu %%a
ma wartość pierwszego argumentu przekazany do skryptu, %%b
wartość drugiego argumentu i %%c
Pozostałe argumenty.
Kiedy biegnę batch.bat USR PWD -Dargument1=1 -Dargument2=2
z wiersza poleceń uzyskać:
command -Duser=USR -Dpwd=PWD -Dargument1=1 -Dargument2=2
Zdjąć echo
po do
zadzwonić do komendy z argumentami.
Działa to tak długo, jak żaden z pierwszych 2 argumentów nie zawiera spacji. Ale nie powiedzie się, jeśli któryś z argumentów zawiera cytowane spacje - prawdopodobnie nie jest to problem z nazwą użytkownika lub hasłem, zdecydowanie nie do zaakceptowania jako ogólne rozwiązanie. – dbenham
@dbenham; masz rację, podaj dowolny rodzaj cytowanych ciągów, a wszystkie zakłady są wyłączone. –
Rzeczywiście cytowane argumenty są w porządku, o ile cytaty są zrównoważone, a argumenty nie zawierają spacji ani znaków specjalnych, takich jak '&' '| itp. Kolejny potencjalny problem - argumenty mogą być również rozdzielane przez', ''; 'lub '=' zamiast spacji. – dbenham