아무도 배치 변수에서 따옴표를 제거하는 효과적이고 안전한 방법을 도울 수 있습니까?
매개 변수 % 1, % 2, % 3 등의 목록을 성공적으로 가져 와서 명명 된 변수에 배치하는 배치 파일을 작성했습니다. 이러한 매개 변수 중 일부는 여러 단어를 포함하므로 큰 따옴표로 묶여 있습니다.
> "Susie Jo" (%1)
> "Smith Barnes" (%2)
> "123 E. Main St." (%3)
다음 % 변수는 명명 된 변수에 배치됩니다.
> set FirstName=%1
> set LastName=%2
> set ShipAddr=%3
변수 검증은 에코에 의해 수행됩니다.
echo. % FirstName %
echo. % LastName %
echo. % ShipAddr %
결과 표시
"Susie Jo"
"Smith Barnes"
"123 E. Main St."
선택한 변수에 포함 된 따옴표를 제거해야합니다. 예를 들어 FirstName 및 LastName은 다른 곳에서 사용되며 따옴표를 포함해서는 안됩니다.
테스트 배치 파일에서 변수에 ~ 물결 문자를 사용하여 따옴표를 제거하는 데 성공했습니다.
> set FirstName=%~1
> set LastName=%~2
해결책이 있다고 생각했지만 곧 배치 파일을 실행할 때 비정상적인 동작을 경험했습니다. 갑자기 CMD가 긴 경로 설명을 인식하지 못합니다. 전체 경로에서 배치 파일의 정상적인 실행
> C:\Documents and Settings\Administrator\My Documents\Txt\batchtest\dataout.bat
보고
> 'C:\Documents' is not recognized as an internal or external command....
따라서 들어오는 % 1 % 2 ... % n 변수에 ~ 틸드 문자를 추가하면 약간의 변경이 발생한 것으로 보입니다. 일부 환경 변수가 변경되었을 수 있습니까?
또한 FOR 명령을 사용하여 다양한 시도로 변수 내에서 따옴표를 지우려고 시도했습니다. 그것은 어색해 보이며 작업을 수행하기 위해 변수 목록을 작성하여이를 수행하는 방법을 배울 수 없었습니다.
이 같은:
for %%g in (%FirstName% %LastName%) do (
set %%g=%%~g
set %%h=%%~h
set FirstName=%%~g
set LastName=%%h
echo.%FirstName% %LastName%
)
두 가지 문제가 있다고 생각합니다.
1) 들어오는 % 1 % 2 변수 (% ~ 1 등)에 ~ tilde를 삽입하는 '짧고 달콤한'아이디어는 일부 설정에 영향을 미치고 CMD가 긴 경로 이름을 탐색하는 방법을 변경 한 것 같습니다.
2) 선택된 명명 된 변수에서 따옴표를 제거하는 깨끗하고 쉬운 방법을 여전히 찾고 있습니다.
경험이 많은 분들께 도움을 주시면 감사하겠습니다. 여기에서 내 기술이 끝났습니다 ... 지침이 필요합니다!
편집 12/26/2009 13:36 PST 전체 배치 파일 :
Blockquote
:: dataout.bat
:: 개정 12/25/2009 포함 된 "따옴표를 제거하기 위해 들어오는 % 변수에 ~ tilde를 추가합니다.
:: 명령 줄 매개 변수를 사용하여 주소 목록을 작성 합니다. ::
QBooks IIF 가져 오기에 대한 데이터 출력 목록을
작성합니다. :: 작성 RUI의 판매자 주문 데이터
:: 테스트를위한 샘플 명령 줄 문자열
:: listmail [firstname] [lastname] [ "address string"] [ "city string"] [state] [zip] [Order #] [PurchDate] [Regname] [ "FirstName LastName"] [TransactionID] [PaymentMethod] [Total] [ProductID] [Qty] [Price_Each] [PackPrep] [Shipping] [CommissionPmt] [Invoice #]
:: 예 : dataout Bellewinkle Moose "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 문서 및 설정 \ 관리자 \ 내 문서 \ txt \ batchtest
에코 처리 % 1 % 2
: VARISET
::% n 명령 줄 매개 변수를 문자열 변수
세트 로 변환 ($ FirstName) = % ~ 1
세트 ($ LastName) = % ~ 2
세트 ($ BillingAddress1) = % ~ 3
세트 ($ BillingCity) = % ~ 4
세트 ($ BillingState) = % ~ 5
세트 ($ BillingPostal) = % ~ 6
세트 ($ OrderNumber) = % ~ 7
세트 ($ Purch_Date) = % ~ 8
세트 ($ RegistrationName) = % ~ 9
시프트
세트 ($ TransactionID) = % ~ 9
시프트
세트 ($ PaymentMethod) = % ~ 9
시프트
세트 ($ Total) = % ~ 9
시프트 세트 ($ ProductIdentifier) = % ~ 9
시프트
세트 ($ Quantity) = % ~ 9
시프트
세트 ($ Price_Each) = % ~ 9
시프트
세트 ($ Pack_Prep) = % ~ 9
시프트
세트 ($ Shipping) = % ~ 9
시프트
세트 ($ ServiceFee) = % ~ 9
시프트
세트 ($ Discount) = % ~ 9
시프트
세트 ($ Invoice) = % ~ 9
시프트
세트 ($ UnitPrice) = % ~ 9
세트 _ShipCombName = % ($ FirstName) % % ($ LastName) %
echo ship combo name is % _ShipCombName %
pause
:: 로그 파일에 문자열 변수 쓰기
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) % % ($ Discount) % % ($ Invoice) % % ($ UnitPrice) % % _ShipCombName % >> d_out_log.txt
:: 계정 할당 서비스 제공 업체
IF / i % ($ PaymentMethod) % == Amazon Receivables SET _QBAcct = Amazon.com
:: 12-25-2009에서 다 기능성을위한 두 번째 Amazon pm't 방법 추가
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) % == 계정 SET _QBAcct = % ($ RegistrationName) %
IF / i % ($ PaymentMethod) % == 메일 SET _QBAcct = % ($ RegistrationName) %
IF / i % ( $ PaymentMethod) % == AMER SET _QBAcct = Auth / Net
IF / i % ($ PaymentMethod) % == DISC SET _QBAcct = Auth / Net
:: QBAccount
IF / i % ($ PaymentMethod) % ==에 따라 담당자 지정자를 할당합니다. Amazon Receivables SET _Rep = Amazon
:: 12-25-2009에서 다 기능성을위한 두 번째 Amazon pm't 방법 추가
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) % == 계정 SET _Rep = RB
IF / i % ($ PaymentMethod) % == Mail SET _Rep = RB
IF / i % ($ PaymentMethod) % == AMER SET _Rep = BlueZap
IF / i % ($ PaymentMethod) % == DISC SET _Rep = BlueZap
:: 중복 주소 데이터 확인
findstr / i / s "% _ShipCombName %"addrlist.txt
echo errorlevel : % errorlevel %
if errorlevel 1 goto : ADDRWRITE
if errorlevel 0 goto : 주소
: ADDRWRITE
echo % _ShipCombName % >> addrlist.txt
echo % ($ BillingAddress1) % >> addrlist.txt
echo % ($ BillingCity) % % ($ BillingState) % % ($ BillingPostal) % >> addrlist.txt
echo. >> addrlist.txt
echo Address File Written
: ADDRFOUND
echo selected rep is % _Rep %
echo selected account is : % _QBAcct %
pause
:: RUI OUT
:: write Merchant Order ID & RUI Order ID to RUI
:: 중복 RUI 데이터 확인 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
:: 쓰기 RUI 종료
:: IIF OUT
: IIFWRITE
:: writeIIF.txt 에서 중복 송장 데이터 확인
find / i "% ($ OrderNumber) %"writeIIF.txt
echo errorlevel : % errorlevel %
if errorlevel 1 goto : HEADWRITE
if errorlevel 0 goto : LINEWRITE
: HEADWRITE
:: write 헤더, 배송 / 취급, 할인, 담당자 및 수수료 데이터를 QB IIF 가져 오기 파일로
에코 % ($ OrderNumber) % % ($ Purch_Date) % 송장 % ($ TransactionID) % % _QBAcct % 미수금 % ($ Total) % % _Rep % >> writeIIF.txt
echo H / P % ($ Pack_Prep) % 1? >> writeIIF.txt
echo SHP % ($ Shipping) % 1? >> writeIIF.txt
echo DISC % ($ Discount) % 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
:: 맞춤 변수에서 파싱 된 할인 가격을 기록합니다 :
echo % ($ ProductIdentifier) % % ($ Price_Each) % % ($ Quantity) %? >> writeIIF.txt
goto : EOF
: WRITE_DEFA
: 제품 데이터에서 파싱 된 기본 가격을 기록합니다.
echo % ($ ProductIdentifier) % % ($ UnitPrice) % % ($ Quantity) %? >> writeIIF.txt
goto : EOF
:: 3 초 지연
:: TYPE NUL | CHOICE.COM / N / CY / TY, 3> NUL
: EOF