Может ли кто-нибудь помочь с эффективным и безопасным способом удаления котировок из пакетных переменных?
Я написал пакетный файл, который успешно импортирует список параметров% 1,% 2,% 3 и т.д. и помещает их в именованные переменные. Некоторые из этих параметров содержат несколько слов и поэтому заключены в двойные кавычки.
> "Susie Jo" (%1)
> "Smith Barnes" (%2)
> "123 E. Main St." (%3)
Эти% переменных затем помещаются в именованные переменные:
> set FirstName=%1
> set LastName=%2
> set ShipAddr=%3
проверка переменных выполняется с помощью эха.
эхо.% FirstName%
эхо.% 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 и т.д.), похоже, повлияла на некоторые настройки и изменила, как CMD перемещает длинные пути.
2) Я все еще ищу чистый и простой способ исключить цитаты из выбранных переменных.
Любая помощь для более опытных людей будет оценена по достоинству. Я в конце своих навыков здесь... нужно некоторое руководство, пожалуйста!
edit 12/26/2009 13:36 PST весь пакетный файл:
Blockquote
:: dataout.bat
:: revision 12/25/2009 добавить ~ тильда к входящим% переменным, чтобы исключить встроенные "кавычки.
:: запись списка адресов с использованием параметров командной строки
:: записывает список выходных данных для импорта QBooks IIF
:: данные Merchant Order для RUI
:: пример строки командной строки для тестирования
:: listmail [firstname] [lastname] [" address string "] [" city string "] [state] [zip] [Order #] [PurchaseDate] [Regname] [" FirstName LastName "] [TransactionID] [PaymentMethod] [ Всего] [ProductID] [Кол-во] [Price_Each] [PackPrep] [Доставка] [КомиссияPmt] [Счет-фактура #]
:: пример: dataout Bellewinkle Moose" 123 Green Forest Way "" Ванкувер "WA 98664 1004968 05/25/2009" Bellewinkle Moose "" Olive Oyl "101738" На счете "20,67 FK-1P 1 8,95 3,00 1,39 239
@echo off
ЦБС
с:
кд\
cd документы и настройки\administrator\мои документы \txt\batchtest
обработка эха% 1% 2
: VARISET
:: Преобразование параметров командной строки% n в строковые переменные
set ($ FirstName) =% ~ 1
set ($ LastName) =% ~ 2
set ($ BillingAddress1) =% ~ 3
set ($ BillingCity) =% ~ 4
set ($ BillingState) =% ~ 5
set ($ BillingPostal) =% ~ 6
set ($ OrderNumber) =% ~ 7
set ($ Purchase_Date) =% ~ 8
set ($ RegistrationName) =% ~ 9
сдвиг
set ($ TransactionID) =% ~ 9
сдвиг
set ($ PaymentMethod) =% ~ 9
сдвиг
set ($ Total) =% ~ 9
сдвиг set ($ ProductIdentifier) =% ~ 9
сдвиг
set ($ Quantity) =% ~ 9
сдвиг
set ($ Price_Each) =% ~ 9
сдвиг
set ($ Pack_Prep) =% ~ 9
сдвиг
set ($ Shipping) =% ~ 9
сдвиг
set ($ ServiceFee) =% ~ 9
сдвиг
set ($ Discount) =% ~ 9
сдвиг
set ($ Invoice) =% ~ 9
сдвиг
set ($ UnitPrice) =% ~ 9
set _ShipCombName =% ($ FirstName)%% ($ LastName)%
Имя комманды echo ship% _ShipCombName%
пауза
:: написать строку varibables в logfile
echo FN% ($ FirstName)% LN% ($ LastName)% BA% ($ BillingAddress1)%% ($ BillingCity)%% ($ BillingState)%% ($ BillingPostal)%% ($ OrderNumber)%% ($ Purchase_Date )%% ($ RegistrationName)%% ($ TransactionID)%% ($ PaymentMethod)%% ($ Total)%% ($ ProductIdentifier)%% ($ Количество)%% ($ Price_Each)%% ($ Pack_Prep)% % ($ Shipping)%% ($ ServiceFee)%% ($ Discount)%% ($ Invoice)%% ($ UnitPrice)%% _ShipCombName% → d_out_log.txt
:: Назначить учетную запись поставщиком услуг
IF/i% ($ PaymentMethod)% == Амазонка Дебиторская задолженность 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)% == 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)% == Амазонка дебиторская задолженность 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 = R B
IF/i% ($ PaymentMethod)% == Mail SET _Rep = R B
IF/i% ($ PaymentMethod)% == AMER SET _Rep = BlueZap
IF/i% ($ PaymentMethod)% == DISC SET _Rep = BlueZap
:: проверка наличия дублированных данных адреса
findstr/i/s" % _ShipCombName% "addrlist.txt
echo errorlevel:% errorlevel%
если errorlevel 1 goto: ADDRWRITE
если errorlevel 0 goto: ADDRFOUND
: ADDRWRITE
echo% _ShipCombName% → addrlist.txt
echo% ($ BillingAddress1)% → addrlist.txt
echo% ($ BillingCity)%% ($ BillingState)%% ($ BillingPostal)% → addrlist.txt
эхо. → addrlist.txt
эхо файл адреса, написанный
: ADDRFOUND
эхо выбранная репутация% _Rep%
Эхо выбранная учетная запись:% _QBAcct%
пауза
:: RUI OUT
:: введите идентификатор торгового адреса и идентификатор заказа RUI для RUI
:: проверьте наличие дубликатов данных RUI в файле writeRUI.txt
CD..
cd RegKOut
find/i" % ($ OrderNumber)% "writeRUI.txt
echo errorlevel:% errorlevel%
если errorlevel 1 goto: RUIWRITE
если errorlevel 0 goto: IIFWRITE
: RUIWRITE
echo% ($ Invoice)%% ($ OrderNumber)% → writeRUI.txt
:: end write RUI
:: IIF OUT
: IIFWRITE
:: Проверка дублированных данных счета в файле writeIIF.txt
find/i" % ($ OrderNumber)%" writeIIF.txt
echo errorlevel:% errorlevel%
если errorlevel 1 goto: HEADWRITE
если errorlevel 0 goto: LINEWRITE
: HEADWRITE
:: запись заголовка, отправка/обработка, скидка, реквизиты и данные комиссии в файл импорта QB IIF
echo% ($ OrderNumber)%% ($ Purchase_Date)% Invoice% ($ TransactionID)%% _QBAcct% Дебиторская задолженность% ($ Всего)%% _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