Чи може хтось допомогти ефективним та безпечним способом видалення цитат із пакетних змінних?
Я написав пакетний файл, який успішно імпортує список параметрів% 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....
Отже, може здатися, що додавання символу ~ tilde до змінних% 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) Моя «коротка та мила» ідея вставити ~ tilde у вхідні змінні% 1% 2 (% ~ 1 тощо), схоже, вплинула на деякі параметри та змінила спосіб переходу довгих імен шляхів до CMD.
2) Я все ще шукаю чистий і простий спосіб усунути цитати з вибраних названих змінних.
Будь-яка допомога для тих, хто досвідченіший, буде дуже вдячна. Я закінчую свої навички тут ... потрібні поради, будь ласка!
редагувати 26.12.2009 13:36 Весь пакетний файл PST:
Blockquote
:: dataout.bat
:: редакція 25.12.2009 додати ~ tilde до вхідних% змінних для усунення вбудованих "лапок.
:: записує список адрес, використовуючи параметри командного рядка
:: записує список вихідних даних для імпорту QBooks IIF
:: пише Дані замовлення продавця для RUI
:: зразок рядка командного рядка для тестування
:: listmail [ім'я] [прізвище] ["рядок адреси"] ["рядок міста"] [стан] [zip] [Порядок №] [PurchDate] [Регістр] ["FirstName LastName"] [TransactionID] [PaymentMethod] [Всього] [ProductID] [Кількість] [Price_Each] [PackPrep] [Доставка] [CommissionPmt] [Рахунок #]
:: приклад: dataout Bellewinkle Moose "123 Green Forest Way" "Vancouver" WA 98664 1004968 25.05.2009 "Bellewinkle Moose" "Olive Oyl" 101738 "На рахунку" 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 набір
змін
($ Кількість) =% ~ 9 набір
змін
($ Price_Each) =% ~ 9 набір
змін
($ Pack_Prep) =% ~ 9 набір
змін
($ Доставка) =% ~ 9 набір
змін
($ ServiceFee) =% ~ 9 набір
змін
($ знижка) =% ~ 9
зрушення
набір ($ Invoice) =% ~ 9
зсуву
безліч ($ UnitPrice) =% ~ 9
комплект _ShipCombName =% ($ FirstName) %% ($ LastName)%
відлуння ім'я комбо корабель% _ShipCombName%
пауза
:: записуйте рядкові змінні в файл
ехо FN% ($ FirstName)% LN% ($ LastName)% BA% ($ BillingAddress1)%% ($ BillingCity)%% ($ BillingState)%% ($ BillingPostal)%% ($ OrderNumber)%% ($ Purch_Date)%% ($ RegistrationName)%% ($ TransactionID)%% ($ PaymentMethod)%% ($ Total)%% ($ ProductIdentifier)%% ($ Кількість)%% ($ Price_Each) %% ($ Pack_Prep)%% ($ Доставка)%% ($ ServiceFee)%% ($ Знижка)%% ($ Рахунок)%% ($ UnitPrice)%% _ShipCombName% >> d_out_log.txt
:: Присвоїти рахунок Постачальник послуг
IF / i% ($ PaymentMethod)% == Дебіторська заборгованість Amazon SET _QBAcct = Amazon.com
:: 12-25-2009 додано другий вечірній метод Amazon для універсальності
IF / i% ($ PaymentMethod)% == SET Amazon _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)% == Mail SET _QBAcct =% ($ RegistrationName)%
IF / i% ( $ PaymentMethod)% == AMER SET _QBAcct = Auth / Net
IF / i% ($ PaymentMethod)% == DISC SET _QBAcct = Auth / Net
:: Призначте позначення Rep на основі QBAccount
IF / i% ($ PaymentMethod)% == Дебіторська заборгованість Amazon SET _Rep = Amazon
:: 12-25-2009 додано другий вечірній метод Amazon для універсальності
IF / i% ($ PaymentMethod)% == SET AmaR 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: ADDRFOUND
: ADDRWRITE
echo% _ShipCombName% >> addrlist.txt
echo% ($ BillingAddress1)% >> addrlist.txt
echo% ($ BillingCity)%% ($ BillingState)%% ($ BillingPostal)% >> addrlist.txt
echo. >> addrlist.txt
echo Файл адреси Написано
: ADDRFOUND
відібраний ехо- повтор % _Rep%
echo вибраний обліковий запис:% _QBAcct%
пауза
:: RUI OUT
:: записувати ID замовлення продавця & RUI Ідентифікатор замовлення на RUI
:: перевірити наявність дублікатів даних 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
:: закінчення запису 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% Дебіторська заборгованість% ($ Всього)%% _Реп % >> writeIIF.txt
відлуння H / P% ($ Pack_Prep)% 1? >> writeIIF.txt
echo SHP% ($ Доставка)% 1? >> writeIIF.txt
echo DISC% ($ Знижка)% 1? >> writeIIF.txt
echo Comm% ($ ServiceFee)% 1? >> writeIIF.txt
: LINEWRITE
IF / i% ($ ProductIdentifier)% екв PH-1 goto WRITE_DEFA ELSE goto WRITE_DISC
echo% ($ ProductIdentifier)%
: WRITE_DISC
:: пише знижені ціни, розібрані зі спеціальної змінної:
echo% ($ ProductIdentifier) %% ($ Price_Each)%% ($ Кількість)%? >> writeIIF.txt
goto: EOF
: WRITE_DEFA
: пише ціни за замовчуванням, проаналізовані з даних про продукт
echo% ($ ProductIdentifier)%% ($ UnitPrice)%% ($ Кількість)%? >> writeIIF.txt
goto: EOF
:: 3 секундна затримка
:: TYPE NUL | CHOICE.COM / N / CY / TY, 3> NUL
: EOF