Czy ktoś może pomóc w skutecznym i bezpiecznym sposobie usuwania cudzysłowów ze zmiennych wsadowych?
Napisałem plik wsadowy, który pomyślnie importuje listę parametrów% 1,% 2,% 3 itd. I umieszcza je w nazwanych zmiennych. Niektóre z tych parametrów zawierają wiele słów i dlatego są ujęte w podwójne cudzysłowy.
> "Susie Jo" (%1)
> "Smith Barnes" (%2)
> "123 E. Main St." (%3)
Te% zmiennych są następnie umieszczane w nazwanych zmiennych:
> set FirstName=%1
> set LastName=%2
> set ShipAddr=%3
weryfikacja zmiennych odbywa się za pomocą echa.
echo.% FirstName%
echo.% LastName%
echo.% ShipAddr%
wyniki są wyświetlane jako
"Susie Jo"
"Smith Barnes"
"123 E. Main St."
Muszę wyeliminować zawarte cytaty z wybranych zmiennych. Na przykład imię i nazwisko są używane w innych miejscach i nie mogą zawierać cudzysłowów.
W testowym pliku wsadowym udało mi się wyeliminować cudzysłowy przy użyciu znaku ~ tyldy w zmiennych.
> set FirstName=%~1
> set LastName=%~2
Myślałem, że mam rozwiązanie, ale wkrótce doświadczyłem niezwykłego zachowania podczas wykonywania plików wsadowych. Nagle CMD nie rozpoznaje instrukcji długiej ścieżki. Normalne wykonanie pliku wsadowego z pełnej ścieżki
> C:\Documents and Settings\Administrator\My Documents\Txt\batchtest\dataout.bat
zwroty
> 'C:\Documents' is not recognized as an internal or external command....
Wygląda więc na to, że dodanie znaku ~ tyldy do nadchodzących zmiennych% 1% 2 ...% n spowodowało pewną zmianę. Być może niektóre zmienne środowiskowe zostały zmienione?
Próbowałem też wyczyścić cudzysłowy z wewnątrz zmiennej przy różnych próbach za pomocą polecenia FOR. Wydaje się to niezręczne i nie mogłem się nauczyć, jak to zrobić, tworząc listę zmiennych do wykonania zadania:
coś takiego:
for %%g in (%FirstName% %LastName%) do (
set %%g=%%~g
set %%h=%%~h
set FirstName=%%~g
set LastName=%%h
echo.%FirstName% %LastName%
)
Myślę, że mam dwa problemy.
1) Mój „krótki i słodki” pomysł wstawiania ~ tyldy w przychodzących zmiennych% 1% 2 (% ~ 1, itd.) Wydaje się mieć wpływ na niektóre ustawienia i zmienił sposób nawigacji CMD w długich nazwach ścieżek.
2) Nadal szukam czystego i łatwego sposobu na wyeliminowanie cudzysłowów z wybranych nazwanych zmiennych.
Jakakolwiek pomoc dla bardziej doświadczonych byłaby bardzo mile widziana. Moje umiejętności dobiegły końca ... proszę o wskazówki!
edytuj 12/26/2009 13:36 PST cały plik wsadowy:
Blockquote
:: dataout.bat
:: rewizja 25.12.2009 add ~ tylda przychodzących% zmiennych, aby wyeliminować osadzone „w cudzysłowie.
:: pisze listy adresów za pomocą parametrów wiersza poleceń
:: pisze listy Wyjście danych dla QBooks IIF importowych
:: zapisów Dane zamówienia sprzedawcy dla RUI
:: przykładowy ciąg wiersza poleceń do testowania
:: listmail [imię] [nazwisko] ["ciąg adresu"] ["ciąg miasta"] [stan] [zip] [nr zamówienia] [data zakupu] [nazwa rejestracji] ["FirstName LastName"] [TransactionID] [PaymentMethod] [Total] [ProductID] [Qty] [Price_Each] [PackPrep] [Shipping] [CommissionPmt] [Invoice #]
:: przykład: dataout Łoś Bellewinkle "123 Green Forest Way" "Vancouver" WA 98664 1004968 05/25/2009 "Bellewinkle Moose" "Olive Oyl" 101738 "On Account" 20,67 FK-1P 1 8,95 3,00 1,39 239
@echo off
cls
c:
cd \
cd dokumenty i ustawienia \ administrator \ moje dokumenty \ txt \ batchtest
przetwarzanie echo% 1% 2
: VARISET
::Konwertuj parametry wiersza poleceń% n na
zestaw zmiennych łańcuchowych ($ FirstName) =
zestaw % ~ 1 ($ LastName) =
zestaw % ~ 2 ($ BillingAddress1) =
zestaw % ~ 3 ($ BillingCity) =
zestaw % ~ 4 ($ BillingState) =
Zestaw % ~ 5 ($ BillingPostal) =
Zestaw % ~ 6 ($ OrderNumber) =
Zestaw % ~ 7 ($ Purch_Date) =
Zestaw % ~ 8 ($ RegistrationName) =% ~ 9
zestaw zmian ($ TransactionID) = zestaw
zmian % ~ 9
($ PaymentMethod) = zestaw
zmian % ~ 9
($ Total) =
zestaw zmian % ~ 9 ($ ProductIdentifier) = zestaw
zmian % ~ 9
($ Quantity) =% ~ 9 zestaw
zmian
($ Price_Each) =% ~ 9 zestaw
zmian
($ Pack_Prep) =% ~ 9 zestaw
zmian
($ Shipping) =% ~ 9 zestaw
zmian
($ ServiceFee) =% ~ 9 zestaw
zmian
($ Rabat) =% ~ 9 zestaw
zmian
($ Invoice) =% ~ 9 zestaw
zmian
($ UnitPrice) =% ~ 9
zestaw _ShipCombName =% ($ FirstName)%% ($ LastName)%
echo nazwa kombinacji statku to% _ShipCombName%
pauza
:: zapisz zmienne łańcuchowe do pliku dziennika
echo FN% ($ FirstName)% LN% ($ LastName)% BA% ($ BillingAddress1)%% ($ BillingCity)%% ($ BillingState)%% ($ BillingPostal)%% ($ OrderNumber)%% ($ Purch_Date)%% ($ RegistrationName)%% ($ TransactionID)%% ($ PaymentMethod)%% ($ Total)%% ($ ProductIdentifier)%% ($ Quantity)%% ($ Price_Each) %% ($ Pack_Prep)%% ($ Shipping)%% ($ ServiceFee)%% ($ Rabat)%% ($ Invoice)%% ($ UnitPrice)%% _ShipCombName% >> d_out_log.txt
:: Przypisz konto przez Usługodawca
IF / i% ($ PaymentMethod)% == Amazon Receivables SET _QBAcct = Amazon.com
:: 12-25-2009 dodano drugą metodę Amazon pm't dla wszechstronności
IF / i% ($ PaymentMethod)% == Amazon SET _QBAcct = Amazon.com
IF / i% ($ PaymentMethod)% == MAST SET _QBAcct = Auth / Net
IF / i% ($ PaymentMethod)% == MasterCard SET _QBAcct = Auth / Net
IF / i% ($ PaymentMethod)% == Visa SET _QBAcct = Auth / Net
IF / i% ($ PaymentMethod)% == PayPal SET _QBAcct = PayPalPmts
IF / i% ($ PaymentMethod)% == Na koncie SET _QBAcct =% ($ RegistrationName)%
IF / i% ($ PaymentMethod)% == Mail SET _QBAcct =% ($ RegistrationName)%
IF / i% ( $ PaymentMethod)% == AMER SET _QBAcct = Auth / Net
IF / i% ($ PaymentMethod)% == DISC SET _QBAcct = Auth / Net
:: Assign Rep desygnator na podstawie QBAccount
IF / i% ($ PaymentMethod)% == Należności Amazon SET _Rep = Amazon
:: 12-25-2009 dodano drugą metodę Amazon pm't dla wszechstronności
IF / i% ($ PaymentMethod)% == Amazon SET _Rep = Amazon
IF / i% ($ PaymentMethod)% == MAST SET _Rep = BlueZap
IF / i% ($ PaymentMethod)% == MasterCard SET _Rep = BlueZap
IF / i% ($ PaymentMethod)% == Visa SET _Rep = BlueZap
IF / i% ($ PaymentMethod)% == PayPal SET _Rep = BlueZap
IF / i% ($ PaymentMethod)% == Na koncie SET _Rep = RB
IF / i% ($ PaymentMethod)% == Mail SET _Rep = RB
IF / i% ($ PaymentMethod)% == AMER SET _Rep = BlueZap
IF / i % ($ PaymentMethod)% == ZESTAW DYSKÓW _Rep = BlueZap
:: sprawdź, czy nie ma zduplikowanych danych adresowych
findstr / i / s "% _ShipCombName%" addrlist.txt
echo errorlevel:% errorlevel%
jeśli errorlevel 1 goto: ADDRWRITE
jeśli errorlevel 0 goto: ADDRFOUND
: ADDRWRITE
echo% _ShipCombName% >> addrlist.txt
echo% ($ BillingAddress1)% >> addrlist.txt
echo% ($ BillingCity)%% ($ BillingState)%% ($ BillingPostal)% >> addrlist.txt
echo. >> addrlist.txt
echo Zapisany plik adresu
: ADDRFOUND
echo wybrany rep to% _Rep%
echo wybrane konto to:% _QBAcct%
pause
:: RUI OUT
:: zapis ID zamówienia sprzedawcy i ID zamówienia RUI do RUI
:: sprawdź, czy nie ma zduplikowanych danych RUI in writeRUI.txt
cd ..
cd RegKOut
find / i "% ($ OrderNumber)%" writeRUI.txt
echo errorlevel:% errorlevel%
if errorlevel 1 goto: RUIWRITE
if errorlevel 0 goto: IIFWRITE
: RUIWRITE
echo% ($ Invoice)% % ($ OrderNumber)% >> writeRUI.txt
:: end write RUI
:: IIF OUT
: IIFWRITE
:: Sprawdź zduplikowane dane faktury w writeIIF.txt
find / i "% ($ OrderNumber)%" writeIIF.txt
echo errorlevel:% errorlevel%
jeśli errorlevel 1 goto: HEADWRITE
jeśli errorlevel 0 goto: LINEWRITE
: HEADWRITE
:: write Nagłówek, wysyłka / obsługa, rabat, dane rep i prowizji do QB IIF import pliku
echo% ($ OrderNumber)%% ($ Purch_Date)% Faktura% ($ TransactionID)%% _QBAcct% Rozrachunki do otrzymania% ($ Razem)%% _Rep % >> writeIIF.txt
echo H / P% ($ Pack_Prep)% 1? >> writeIIF.txt
echo SHP% ($ Wysyłka)% 1? >> writeIIF.txt
echo DISC% ($ Rabat)% 1? >> writeIIF.txt
echo Comm% ($ ServiceFee)% 1? >> writeIIF.txt
: LINEWRITE
IF / i% ($ ProductIdentifier)% equ PH-1 goto WRITE_DEFA ELSE goto WRITE_DISC
echo% ($ ProductIdentifier)%
: WRITE_DISC
:: zapisuje obniżone ceny przeanalizowane ze zmiennej niestandardowej:
echo% ($ ProductIdentifier) %% ($ Price_Each)%% ($ Quantity)%? >> writeIIF.txt
goto: EOF
: WRITE_DEFA
: zapisuje ceny domyślne przeanalizowane z danych produktu
echo% ($ ProductIdentifier)%% ($ UnitPrice)%% ($ Quantity)%? >> writeIIF.txt
goto: EOF
:: 3-sekundowe opóźnienie
:: TYPE NUL | CHOICE.COM / N / CY / TY, 3> NUL
: EOF