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

Как использовать ” (кавычки) в качестве разделителя for /f в cmd.exe в windows 7

обычно опционы заключаются в кавычки. Если вы хотите использовать цитату как часть опциона, то заключительные кавычки должны быть отброшены. Это означает, что все символы, которые интерпретатор CMD использует в качестве разделителей маркеров, должны быть экранированы, включая пробел и знак равенства. Также цитата должна быть экранирована.

for /f tokens^=2^ delims^=^" %%F in ...

этот же метод используется для решения другой распространенной проблемы – как использовать FOR /F и сохранить всю строку, независимо от того, какой символ начинается с данной строки. Тот проблема-параметр EOL (по умолчанию точка с запятой). Чтобы гарантировать сохранение всей линии, EOL должен быть отключен. Здесь снова закрывающие кавычки отбрасываются и разделители маркеров должны быть экранированы.

for /f delims^=^ eol^= %%F in ....

DELIMS имеет значение nothing, поскольку пробел никогда не включается в параметр DELIMS, если не указан последний параметр. Следующий строковый символ после EOL= принимается за символ EOL. Но в этом случае не существует следующего символа, потому что пробел не ускользнул и не процитирован. Так что выше синтаксис отключает DELIMS и Эол.

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

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

Я написал пакетный файл, который успешно импортирует список параметров %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%
эхо.%ShipAddr%

отображать результаты в виде

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

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

в тестовом пакетном файле мне удалось исключить кавычки, используя символ ~tilde в переменных.

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

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

> C:Documents and SettingsAdministratorMy DocumentsTxtbatchtestdataout.bat

возвращает

> 'C:Documents' is not recognized as an internal or external command....

таким образом, кажется, что добавление символа ~tilde к входящему %1% 2…%n переменных вызвало некоторые изменения. Возможно, некоторые переменные среды были изменены?

:/>  Как включить веб-камеру на ноутбуке с windows 7 и как включить и отключить камеру на ноутбуке с windows 7

Я также попытался очистить кавычки из переменной с помощью различные попытки использования команды 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) я все еще в поисках чистый и простой способ устранения кавычек из выбранных именованных переменных.

любая помощь для тех, кто более опытен, будет наиболее оценена. Мои навыки здесь на исходе… нужна помощь, пожалуйста!

редактировать 12/26/2009 13:36 PST
весь пакетный файл:

Blockquote
:: dataout.летучая мышь!–17–>
:: revision 12/25/2009 добавьте ~tilde к входящим переменным%, чтобы исключить встроенные кавычки.
:: записывает список адресов с помощью параметры командной строки
:: записывает список вывода данных для импорта QBooks IIF
:: пишет данные торгового заказа для RUI
:: пример строки командной строки для тестирования
:: listmail[имя][фамилия][“адрес”][“города строку”][государство][зип][заказ#][PurchDate][Regname][“Имя Фамилия”][ИД транзакции][метод оплаты][сумма][Кодтовара][кол-во][Price_Each][PackPrep] [доставка] [CommissionPmt] [счет-фактура#]:: пример: dataout Bellewinkle Moose ” 123 Green Forest Way “”Vancouver” 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
cls
c:
компакт-диск
cd документы и настройкиадминистраторМои документыtxtbatchtest
обработка Эха %1 %2
: ВАРИСЕТ
:: Преобразование % n параметров командной строки в строковые переменные
set ($FirstName)=%~1
set ($LastName)=%~2
набор ($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
сдвиг
set ($ProductIdentifier)=%~9
shift
set ($Quantity)=%~9
shift
set ($Price_Each)=%~9
shift
set ($Pack_Prep)=%~9
shift
набор ($доставка)=%~9
shift
set ($ServiceFee)=%~9
shift
набор (скидка)=%~9
shift
set ($Invoice)=%~9
shift
set ($UnitPrice)=%~9
set _ShipCombName=%($FirstName)% %($LastName)%
комбо-имя корабля echo – %_ShipCombName%
пауза
:: запись строки varibables в logfile
Эхо ФН %($имя)% в %($фамилия)% БА %($BillingAddress1)% %($BillingCity)% %($BillingState)% %($BillingPostal)% %($номер заказа)% %($Purch_Date)% %($RegistrationName)% %($ИД транзакции)% %($метод оплаты)% %($общая)% %($ProductIdentifier)% %($количество)% %($Price_Each)% %($Pack_Prep)% %($Доставка)% %($ServiceFee)% %(скидка)% %($инвойс)% %($цена)% %_ShipCombName% >> d_out_log.txt
:: Назначить учетную запись поставщиком услуг
IF / i %($PaymentMethod)%==набор дебиторской задолженности Amazon _QBAcct=Amazon.com
:: 12-25-2009 добавлен второй метод Amazon pm’T для универсальности
IF / i %($PaymentMethod)%==набор Amazon _QBAcct=Amazon.com
Если /i %($PaymentMethod)%==MAST SET _QBAcct=Auth/Net
Если / i %($PaymentMethod)%==MasterCard SET _QBAcct=Auth/Net
Если / i %($PaymentMethod)%==Visa SET _QBAcct=Auth/Net
Если / i %($PaymentMethod)%==PayPal SET _QBAcct=PayPalPmts
IF / i %($PaymentMethod)%==на счете установлено _QBAcct=%($RegistrationName)%
Если / i %($PaymentMethod)%==почтовый набор _QBAcct=%($RegistrationName)%
Если /i %($PaymentMethod)%==Amer SET _QBAcct=Auth/Net
Если / i %($PaymentMethod)%==набор дисков _QBAcct=Auth/Net
:: Назначить обозначение Rep на основе QBAccount
Если / i %($PaymentMethod)%==Amazon дебиторская задолженность SET _Rep=Amazon
:: 12-25-2009 добавлен второй метод Amazon pm’T для универсальности
IF / i %($PaymentMethod)%==Amazon SET _Rep=Amazon
Если / i %($PaymentMethod)%==набор мачт _Rep=BlueZap
Если / i %($PaymentMethod)%==MasterCard SET _Rep=BlueZap
Если / i %($PaymentMethod)%==Visa SET _Rep=BlueZap
Если / i %($PaymentMethod)%==PayPal SET _Rep=BlueZap
Если / i %($PaymentMethod)%==на счете SET _Rep=R B
Если / i %($PaymentMethod)%==почтовый набор _Rep=R B
Если / i %($PaymentMethod)%==Amer SET _Rep=BlueZap
IF / i %($PaymentMethod)%==набор дисков _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
echo адрес файла написано
: ADDRFOUND
Echo выбранный rep – %_Rep%
выбранная учетная запись echo: %_QBAcct%
пауза
:: RUI OUT
: напишите заказу купца ID и id заказа Руи Руи
:: проверьте наличие дубликатов данных RUI в writeRUI.txt
компакт..
компакт-диск RegKOut
найти / i “%($OrderNumber)%” writeRUI.txt
echo errorlevel: %errorlevel%
если значение errorlevel 1 Гото : RUIWRITE
если errorlevel 0 goto :IIFWRITE
: RUIWRITE
echo %($Invoice)% %($OrderNumber)% >> writeRUI.txt
:: конец писать RUI
:: IIF OUT
:IIFWRITE
:: Проверьте наличие дубликатов данных накладной в writeIIF.txt
найти /i” %($OrderNumber)% ” writeIIF.txt
echo errorlevel: %errorlevel%
если errorlevel 1 goto: HEADWRITE
если errorlevel 0 goto: LINEWRITE
: HEADWRITE
:: написать заголовок, Доставка / обработка, скидка, Rep и комиссионные данные в файл импорта QB IIF
echo %($OrderNumber)% %($Purch_Date)% счет-фактура %($TransactionID)% %_QBAcct% дебиторская задолженность %($Total)% %_Rep% >> writeIIF.txt
echo H / P %($Pack_Prep)% 1 ? > > writeIIF.txt
echo SHP %($доставка)% 1 ? > > writeIIF.txt
диск echo %(скидка$)% 1 ? > > writeIIF.txt
эхо 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)% %($количество)% ? > > writeIIF.txt
Гото :ВФ
:WRITE_DEFA
: записывает цены по умолчанию из данных продукта
echo %($ProductIdentifier)% %($UnitPrice)% %($количество)% ? > > writeIIF.txt
Гото :ВФ
:: 3-секундной задержкой
:: ТИП NUL | CHOICE.COM /N /CY / TY,3 >NUL
: EOF

:/>  Очистить корзину через командную строку - Настройка компьютера своими руками - о железе и программах

Экранирование двойных кавычек в командной строке ms dos?

Имеется некое приложение командной строки (кто знает cryptcp). Этому приложению передается большое количество параметров. Один из параметров заключен в двойные кавычки. И внутри этого параметра есть значение также содержащее двойные кавычки (обратите внимание на значение параметра -dn – он как раз в двойных кавычках, а в самом значении есть O=ООО “Тестовая организация”)

cryptcp -creatrqst p20.der -provtype 75 -cont Petrov20 -dn “T=Руководитель,OID.1.2.840.113549.1.9.2=INN=0123456789/KPP=123456789/OGRN=0123456789123,CN=Петров Петр Петрович,OU=Тестовое подразделение,O=ООО “Тестовая организация”,L=Краснодар,S=23 Краснодарский край,C=RU,E=test@test.ru,ИНН=001234567890,ОГРН=0123456789123,СНИЛС=12345678901″ -certusage “1.2.643.1.1,1.2.643.1.2,1.2.643.1.3.1,1.2.643.1.4.5,1.2.643.1.5,1.2.643.1.6” -both -ku -provname “Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider”

Что уже попробовал:
-обрамление значения в ‘ или ` вместо двойных кавычек;
-экранирование двойных кавычек в O=ООО “Тестовая организация” символами , ^;
– замену O=ООО “Тестовая организация” на O=ООО “”Тестовая организация””;
– замену ” на x22 или x22 или ^x22;
– замену пробелов в значении на , чтобы все значение не заключать в двойные кавычки.

Прошу подсказать еще варианты.

Спасибо

Оставьте комментарий