Удаление двойных кавычек от переменных в пакетном файле создает проблемы со средой CMD

Кто-либо может помочь с эффективным и безопасным способом удалить кавычки из пакетных переменных?

Я записал пакетный файл, который успешно импортирует список параметров %1, %2, %3 и т.д. и размещает их в именованные переменные. Некоторые из этих параметров содержат несколько слов и для этого включаются в двойные кавычки.

> "Susie Jo" (%1)  
> "Smith Barnes" (%2)  
> "123 E. Main St." (%3)  

Эти %variables затем помещаются в именованные переменные:

> set FirstName=%1  
> set LastName=%2  
> set ShipAddr=%3  

проверка переменных сделана эхом.

эхо. % % FirstName
эхо. % % LastName
эхо. % % ShipAddr

результаты отображаются как

"Susie Jo"  
"Smith Barnes"  
"123 E. Main St."  

Я должен устранить включенные кавычки на выбранных переменных. Например, FirstName и LastName используются в другом месте и не должны включать кавычки.

В тестовом пакетном файле я был успешен при устранении кавычек с помощью ~tilde символа в переменных.

> set FirstName=%~1
> set LastName=%~2 

Я думал, что у меня было решение, но я скоро испытал необычное поведение с выполнением пакетных файлов. Внезапно CMD не является никаким длинным трактом распознавания statments. Нормальное выполнение пакетного файла от полного пути

> 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 весь пакетный файл:

Блок цитирования
:: dataout.bat
:: пересмотр 25.12.2009 добавляет ~tilde к поступлению %variables для устранения встроенных "кавычек.
:: список адресов записей с помощью параметров командной строки
:: написал список вывода данных для импорта QBooks IIF
:: данные Порядка Продавца записей для RUI
:: демонстрационная строка командной строки для тестирования
:: listmail [firstname] [lastname] ["обращаются к строке"] ["городская строка"] [состояние] [zip] [Order#][PurchDate][Regname] ["FirstName LastName"] [TransactionID][PaymentMethod] [Общее количество] [ProductID] [количество] [Price_Each] [PackPrep] [Поставка] [CommissionPmt] [Invoice#]
:: пример: выходные данные Американский лось Bellewinkle "123 Зеленых Леса Путь" "Ванкувер" WA 98664 1004968 05/25/2009 "Американский лось Bellewinkle" "Olive Oyl" 101738 "На Учетной записи" 20,67 FK-1P 1 8.95 3.00 1.39 239
@echo прочь
cls
c:
cd\
документы CD и settings\administrator\my documents\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) %
отзовитесь эхом комбинированное имя поставки является % _ShipCombName %
пауза
:: запишите строку varibables в файл журнала
повторите % 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
:: Присвойте учетную запись поставщика услуг
ЕСЛИ/i % ($PaymentMethod) % == Дебиторская задолженность Amazon УСТАНОВИЛ _QBAcct=Amazon.com
:: 25.12.2009 добавил второй Amazon pm't метод для универсальности
ЕСЛИ/i % ($PaymentMethod) % == Amazon УСТАНОВИЛ _QBAcct=Amazon.com
ЕСЛИ/i % ($PaymentMethod) % == МАЧТА УСТАНОВИЛ _QBAcct=Auth/Net
ЕСЛИ/i % ($PaymentMethod) % == MasterCard УСТАНОВИЛ _QBAcct=Auth/Net
ЕСЛИ/i % ($PaymentMethod) % == Виза УСТАНОВИЛ _QBAcct=Auth/Net
ЕСЛИ/i % ($PaymentMethod) % == PayPal УСТАНОВИЛ _QBAcct=PayPalPmts
ЕСЛИ/i % ($PaymentMethod) % == На Учетной записи УСТАНОВИЛ _QBAcct = %($RegistrationName), %
ЕСЛИ/i % ($PaymentMethod) % == Почта УСТАНОВИЛ _QBAcct = %($RegistrationName), %
ЕСЛИ/i % ($PaymentMethod) % == AMER УСТАНОВИЛ _QBAcct=Auth/Net
ЕСЛИ/i % ($PaymentMethod) % == НАБОР ДИСКОВ _QBAcct=Auth/Net
:: Присвойте указатель члена палаты представителей на основе QBAccount
ЕСЛИ/i % ($PaymentMethod) % == Дебиторская задолженность Amazon УСТАНОВИЛ _Rep=Amazon
:: 25.12.2009 добавил второй Amazon pm't метод для универсальности
ЕСЛИ/i % ($PaymentMethod) % == Amazon УСТАНОВИЛ _Rep=Amazon
ЕСЛИ/i % ($PaymentMethod) % == МАЧТА УСТАНОВИЛ _Rep=BlueZap
ЕСЛИ/i % ($PaymentMethod) % == MasterCard УСТАНОВИЛ _Rep=BlueZap
ЕСЛИ/i % ($PaymentMethod) % == Виза УСТАНОВИЛ _Rep=BlueZap
ЕСЛИ/i % ($PaymentMethod) % == PayPal УСТАНОВИЛ _Rep=BlueZap
ЕСЛИ/i % ($PaymentMethod) % == На Учетной записи УСТАНОВИЛ _Rep=R B
ЕСЛИ/i % ($PaymentMethod) % == Почта УСТАНОВИЛ _Rep=R B
ЕСЛИ/i % ($PaymentMethod) % == AMER УСТАНОВИЛ _Rep=BlueZap
ЕСЛИ/i % ($PaymentMethod) % == НАБОР ДИСКОВ _Rep=BlueZap
:: проверьте на дублирующиеся адресные сведения
findstr/i/s "% _ShipCombName %" addrlist.txt
эхо errorlevel: % %errorlevel
если errorlevel 1 goto: ADDRWRITE
если errorlevel 0 goto: ADDRFOUND
:ADDRWRITE
% эха _ShipCombName %>> addrlist.txt
% эха ($BillingAddress1) %>> addrlist.txt
% эха ($BillingCity) % % ($BillingState) % % ($BillingPostal) %>> addrlist.txt
эхо.>> addrlist.txt
повторите Записанный Файл Адреса
:ADDRFOUND
отзовитесь эхом выбранный представитель является % _Rep %
отзовитесь эхом выбранная учетная запись: % _QBAcct %
пауза
:: RUI
:: запишите Merchant Order ID & RUI Order ID в RUI
:: проверьте на дублирующиеся данные RUI в writeRUI.txt
CD..
cd RegKOut
найдите/i "% ($OrderNumber) %" writeRUI.txt
эхо errorlevel: % %errorlevel
если errorlevel 1 goto: RUIWRITE
если errorlevel 0 goto: IIFWRITE
:RUIWRITE
% эха ($Invoice) % % ($OrderNumber) %>> writeRUI.txt
:: закончите пишут RUI
:: IIF
:IIFWRITE
:: Проверьте на дублирующиеся данные счета в writeIIF.txt
найдите/i "% ($OrderNumber) %" writeIIF.txt
эхо errorlevel: % %errorlevel
если errorlevel 1 goto: HEADWRITE
если errorlevel 0 goto: LINEWRITE
:HEADWRITE
:: запишите Заголовок, Поставку/Обработку, скидку, члена палаты представителей и уполномочьте данные в файл импорта QB IIF
% эха ($OrderNumber) % % ($Purch_Date) % Счета % ($TransactionID) % % _QBAcct % Дебиторской задолженности % ($Total) % % _Rep %>> writeIIF.txt
повторить % H/P ($Pack_Prep) % 1?>> writeIIF.txt
повторить % SHP ($Shipping) % 1?>> writeIIF.txt
повторить % ДИСКА ($Discount) % 1?>> writeIIF.txt
повторить % Коммуникации ($ServiceFee) % 1?>> writeIIF.txt
:LINEWRITE
ЕСЛИ/i % ($ProductIdentifier) % equ ТЕЛ. 1 goto WRITE_DEFA ЕЩЕ goto WRITE_DISC
% эха ($ProductIdentifier) %
:WRITE_DISC
:: сниженные цены записей проанализировали от пользовательской переменной:
% эха ($ProductIdentifier) % % ($Price_Each) % % ($Quantity) %?>> writeIIF.txt
goto: EOF
:WRITE_DEFA
Цены значения по умолчанию:writes проанализированы от данных продукта
% эха ($ProductIdentifier) % % ($UnitPrice) % % ($Quantity) %?>> writeIIF.txt
goto: EOF
:: 3-секундная задержка
:: ВВЕДИТЕ NUL | CHOICE.COM/N/CY/TY, 3> NUL
:EOF

110
задан BobB 27 December 2009 в 17:14
поделиться

2 ответа

Ваш вывод (1) звучит неправильно. В проигрывании должен быть какой-то другой фактор.

Проблема котировок в параметрах пакетного файла обычно решается удалением котировок с %~, а затем, при необходимости, их возвратом вручную.

Например:

set cmd=%~1
set params=%~2 %~3

"%cmd%" %params%

Обратите внимание на котировки в районе %cmd%. Без них путь с пробелами не будет работать.

Если бы вы могли поместить весь код партии, возможно, был бы сделан более конкретный ответ.

.
39
ответ дан 24 November 2019 в 03:12
поделиться

Похоже на простую ошибку, когда вы используете %~ там, где не должны быть. Использование if %~ принципиально не меняет способ работы пакетных файлов, а просто удаляет кавычки из строки в этой единственной ситуации.

3
ответ дан 24 November 2019 в 03:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: