Может ли кто-нибудь помочь с эффективным и безопасным способом удаления кавычек из пакетных переменных?
Я написал командный файл, который успешно импортирует список параметров% 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 и т. Д.), Похоже, повлияла на некоторые настройки и изменила то, как CMD перемещается по длинным путям.
2) Я все еще ищу чистый и простой способ убрать кавычки из выбранных именованных переменных.
Любая помощь для более опытных будет очень признательна. Я здесь на исходе ... нужен совет, пожалуйста!
отредактировать 26/12/2009 13:36 PST весь командный файл:
Blockquote
:: dataout.bat
:: редакция 12/25/2009 добавить ~ Тильда входящих% переменных ликвидировать встроенные « в кавычки.
:: записывает список адресов с использованием параметров командной строки
:: записи списка вывода данных для QBooks IIF импорта
:: записи Данные торгового заказа для RUI
:: образец строки командной строки для тестирования
:: listmail [имя] [фамилия] ["адресная строка"] ["городская строка"] [штат] [почтовый индекс] [Заказ №] [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 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 документы и настройки \ администратор \ мои документы \ 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
смен
($ Доставка) =% ~ 9
смен
($ ServiceFee) =% ~ 9
смен
($ Discount) =% ~ 9
смен
($ Invoice) =% ~ 9
набор смен ($ UnitPrice) =% ~ 9
набор _ShipCombName =% ($ FirstName)%% ($ LastName)%
имя комбо эхо-корабля% _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
:: Assign Account by Поставщик услуг
IF / i% ($ PaymentMethod)% == Amazon Receivables SET _QBAcct = Amazon.com
:: 25.12.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)% == Amazon Receivables SET _Rep = Amazon
:: 25.12.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%,
если 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 Address File Written
: ADDRFOUND
echo selected rep is% _Rep%
echo selected account is:% _QBAcct%
pause
:: RUI OUT
:: записать идентификатор заказа продавца и идентификатор заказа RUI в 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
:: end write 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% ($ Доставка)% 1? >> writeIIF.txt
echo DISC% ($ скидка)% 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