バッチ変数から引用符を削除する効果的で安全な方法を誰かが手助けできますか?
パラメータ%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は他の場所で使用され、引用符を含めることはできません。
テストバッチファイルでは、変数に〜tilde文字を使用して引用符を削除することに成功しました。
> 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変数に〜tilde文字を追加すると、いくつかの変更が発生したように見えます。おそらくいくつかの環境変数が変更されていますか?
また、FORコマンドを使用してさまざまな試行を行い、変数内から引用符をクリアしてみました。それはぎこちないようで、タスクを実行する変数のリストを作成してこれを達成する方法を学ぶことができませんでした。
このようなもの:
for %%g in (%FirstName% %LastName%) do (
set %%g=%%~g
set %%h=%%~h
set FirstName=%%~g
set LastName=%%h
echo.%FirstName% %LastName%
)
私には2つの問題があると思います。
1)着信%1%2変数(%〜1など)に〜tildeを挿入するという私の「短くて甘い」アイデアは、一部の設定に影響を与え、CMDが長いパス名をナビゲートする方法を変更したようです。
2)選択した名前付き変数から引用符を削除するためのクリーンで簡単な方法を探しています。
より経験のある人のためのどんな助けでも最もありがたいです。私はここで私のスキルの終わりです...いくつかのガイダンスが必要です!
編集12/26/2009 13:36 PSTバッチファイル全体:
Blockquote
:: dataout.bat
::リビジョン12/25/2009 埋め込まれた「引用符」を削除するために、入力%variablesに〜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 2009/05/25 "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ドキュメントとsettings \ administrator \ myドキュメント\ 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
:: 2009年12月25日、汎用性のための2番目の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
:: 2009年12月25日、汎用性のための2番目の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)%==メール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: ADDRFOUND
:ADDRWRITE
echo%_ShipCombName%>> addrlist.txt
echo%($ BillingAddress1)%>> addrlist.txt
echo%($ BillingCity)%%($ BillingState)%%($ BillingPostal)%>> addrlist.txt
エコー。>> addrlist.txt
echoアドレスファイルの
書き込み:ADDRFOUND
echo selected rep is%_Rep%
echo selected account is:%_QBAcct%
pause
:: RUI OUT
:: write Merchant Order ID&RUI Order ID to RUI
:: check for duplicate RUI data 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
::書き込み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インポートファイルへのヘッダー、出荷/処理、割引、担当者および手数料のデータ
echo%($ OrderNumber)%%($ Purch_Date)%Invoice%($ TransactionID)%%_QBAcct%Accounts Receivable%($ Total)%%_Rep %>> writeIIF.txt
echo H / P%($ Pack_Prep)%1?>> writeIIF.txt
echo SHP%($ Shipping)%1?>> writeIIF.txt
echo DISC%($ Discount)%1?>> writeIIF.txt
エコー通信%($ 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