Quelqu'un peut-il aider avec un moyen efficace et sûr de supprimer les citations des variables de lot?
J'ai écrit un fichier batch qui importe avec succès une liste de paramètres% 1,% 2,% 3 etc. et les place dans des variables nommées. Certains de ces paramètres contiennent plusieurs mots et sont par conséquent placés entre guillemets.
> "Susie Jo" (%1)
> "Smith Barnes" (%2)
> "123 E. Main St." (%3)
Ces% variables sont ensuite placées dans des variables nommées:
> set FirstName=%1
> set LastName=%2
> set ShipAddr=%3
la vérification des variables se fait par écho.
echo.% FirstName%
echo.% LastName%
echo.% ShipAddr%
les résultats s'affichent comme
"Susie Jo"
"Smith Barnes"
"123 E. Main St."
Je dois éliminer les citations incluses sur les variables sélectionnées. Par exemple, FirstName et LastName sont utilisés ailleurs et ne doivent pas inclure de guillemets.
Dans un fichier batch de test, j'ai réussi à éliminer les guillemets en utilisant le caractère ~ tilde dans les variables.
> set FirstName=%~1
> set LastName=%~2
Je pensais avoir la solution, mais j'ai rapidement connu un comportement inhabituel lors de l'exécution de fichiers batch. Soudain, CMD ne reconnaît plus les instructions de long chemin. Exécution normale du fichier de commandes à partir du chemin complet
> C:\Documents and Settings\Administrator\My Documents\Txt\batchtest\dataout.bat
Retour
> 'C:\Documents' is not recognized as an internal or external command....
Il semblerait donc que l'ajout du caractère ~ tilde aux variables entrantes% 1% 2 ...% n ait entraîné des changements. Peut-être que certaines variables d'environnement ont été modifiées?
J'ai également essayé d'effacer les guillemets de la variable avec diverses tentatives en utilisant la commande FOR. Cela semble gênant et je n'ai pas pu apprendre comment y parvenir en créant une liste de variables pour effectuer la tâche:
quelque chose comme ça:
for %%g in (%FirstName% %LastName%) do (
set %%g=%%~g
set %%h=%%~h
set FirstName=%%~g
set LastName=%%h
echo.%FirstName% %LastName%
)
Je pense que j'ai deux problèmes.
1) Mon idée «courte et douce» d'insérer ~ tilde dans les variables entrantes% 1% 2 (% ~ 1, etc.) semble avoir affecté certains paramètres et modifié la façon dont CMD navigue dans les chemins longs.
2) Je suis toujours à la recherche d'un moyen propre et simple d'éliminer les citations des variables nommées sélectionnées.
Toute aide pour les plus expérimentés serait très appréciée. Je suis à la fin de mes compétences ici ... besoin de conseils s'il vous plaît!
modifier 12/26/2009 13:36 PST fichier de commandes entier:
Blockquote
:: dataout.bat
:: révision 12/25/2009 ajoute ~ tilde aux variables% entrantes pour éliminer les guillemets incorporés ".
:: écrit la liste d'adresses en utilisant les paramètres de ligne de commande
:: écrit la liste de sortie des données pour QBooks IIF import
:: écrit Données de la commande du marchand pour RUI
:: exemple de chaîne de ligne de commande pour les tests
:: listmail [prénom] [nom] ["chaîne d'adresse"] ["chaîne de ville"] [état] [zip] [numéro de commande] [date de péremption] [nom d'enregistrement] ["FirstName LastName"] [TransactionID] [PaymentMethod] [Total] [ProductID] [Qty] [Price_Each] [PackPrep] [Shipping] [CommissionPmt] [Invoice #]
:: exemple: dataout Bellewinkle Moose "123 Green Forest Way" "Vancouver" WA 98664 1004968 25/05/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 documents and settings \ administrator \ my documents \ txt \ batchtest
traitement de l'écho% 1% 2
: VARISET
::Convertir les paramètres de ligne de commande% n en variables de chaîne
set ($ FirstName) =% ~ 1
set ($ LastName) =% ~ 2
set ($ BillingAddress1) =% ~ 3
set ($ BillingCity) =% ~ 4
set ($ BillingState) =% ~ 5
set ($ BillingPostal) =% ~ 6
set ($ OrderNumber) =% ~ 7
set ($ Purch_Date) =% ~ 8
set ($ RegistrationName) =% ~ 9
shift
set ($ TransactionID) =% ~ 9
shift
set ($ PaymentMethod) =% ~ 9
shift
set ($ Total) =% ~ 9
shift set ($ ProductIdentifier) =% ~ 9
shift
set ($ Quantity) =% ~ 9
shift IF / i% ($ PaymentMethod)% == MasterCard SET _Rep = BlueZap IF / i% ($ PaymentMethod)% == Visa SET _Rep = BlueZap IF / i% ($ PaymentMethod)% == PayPal SET _Rep = BlueZap IF / i% ($ PaymentMethod)% == On Account SET _Rep = RB echo% ($ BillingCity)%% ($ BillingState)%% ($ BillingPostal)% >> addrlist.txt echo. >> addrlist.txt echo Fichier d'adresse écrit : ADDRFOUND écho sélectionné rep est% _Rep% echo compte sélectionné est:% _QBAcct%
ensemble de ($ Price_Each) =% ~ 9 ensemble de
décalage
($ Pack_Prep) =% ~ 9 ensemble de
décalage
($ Shipping) =% ~ 9 ensemble de
décalage
($ ServiceFee) =% ~ 9 ensemble de
décalage
($ Discount) =% ~ 9
shift
set ($ Invoice) =% ~ 9
shift
set ($ UnitPrice) =% ~ 9
set _ShipCombName =% ($ FirstName)%% ($ LastName)% le
nom de la combinaison d'écho du navire est% _ShipCombName%
pause
:: écrire des variables de chaîne dans le fichier journal
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
:: Assign Account by Fournisseur de services
IF / i% ($ PaymentMethod)% == Amazon Receivables SET _QBAcct = Amazon.com
:: 12-25-2009 a ajouté une deuxième méthode Amazon pm't pour la polyvalence
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)% == On Account 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 designator basé sur QBAccount
IF / i% ($ PaymentMethod)% == Amazon Receivables SET _Rep = Amazon
:: 12-25-2009 a ajouté une deuxième méthode Amazon pm't pour la polyvalence
IF / i% ($ PaymentMethod)% == Amazon SET _Rep = Amazon
IF / i% ($ PaymentMethod)% == MAST SET _Rep = BlueZap
IF / i% ($ PaymentMethod)% == Mail SET _Rep = RB
IF / i% ($ PaymentMethod)% == AMER SET _Rep = BlueZap
IF / i % ($ PaymentMethod)% == DISC SET _Rep = BlueZap
:: vérifier les données d'adresse en double
findstr / i / s "% _ShipCombName%" addrlist.txt
echo errorlevel:% errorlevel%
si errorlevel 1 goto: ADDRWRITE
if errorlevel 0 goto: ADDRFOUND
: ADDRWRITE
echo% _ShipCombName% >> addrlist.txt
echo% ($ BillingAddress1)% >> addrlist.txt
pause
:: RUI OUT
:: écrire l'ID de commande du marchand et l'ID de commande RUI dans RUI
:: vérifier les données RUI en double dans writeRUI.txt : IIFWRITE :: Vérifier les données de facturation en double dans writeIIF.txt find / i "% ($ OrderNumber) % "writeIIF.txt écho niveau d'erreur:% errorlevel%
cd ..
cd RegKOut
find / i "% ($ OrderNumber)%" writeRUI.txt
echo errorlevel:% errorlevel%
si errorlevel 1 goto: RUIWRITE
if errorlevel 0 goto: IIFWRITE
: RUIWRITE
echo% ($ Invoice)% % ($ OrderNumber)% >> writeRUI.txt
:: end write RUI
:: IIF OUT
si errorlevel 1 goto: HEADWRITE
if errorlevel 0 goto: LINEWRITE
: HEADWRITE
:: write Données d'en-tête, d'expédition / de manutention, de remise, de représentant et de commission vers le fichier d'importation 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% ($ Expédition)% 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
:: écrit des prix réduits analysés à partir de la variable personnalisée:
echo% ($ ProductIdentifier) %% ($ Price_Each)%% ($ Quantity)%? >> writeIIF.txt
goto: EOF :: Retard de 3 secondes :: TYPE NUL | CHOICE.COM / N / CY / TY, 3> NUL : EOF
: WRITE_DEFA
: écrit les prix par défaut analysés à partir des données produit
echo% ($ ProductIdentifier)%% ($ UnitPrice)%% ($ Quantity)%? >> writeIIF.txt
goto: EOF