Как Вы разделяете кавычки из строки ECHO'ed в пакетном файле Windows?

Преобразованный файл .dat в CSV, загруженный с использованием функции CSV Pandas с кодировкой ISO-8859-1 вместо UTF-8.

38
задан Lance Roberts 24 February 2013 в 18:25
поделиться

5 ответов

Команда call имеет встроенную функциональность. Чтобы процитировать справку для вызова:

 Substitution of batch parameters (%n) has been enhanced.  You can
 now use the following optional syntax:

 %~1         - expands %1 removing any surrounding quotes (")

Вот примитивный пример:

@echo off
setlocal
set mystring="this is some quoted text"
echo mystring=%mystring%
call :dequote %mystring%
echo ret=%ret%
endlocal
goto :eof

:dequote
setlocal
rem The tilde in the next line is the really important bit.
set thestring=%~1
endlocal&set ret=%thestring%
goto :eof

Вывод:

C:\>dequote
mystring="this is some quoted text"
ret=this is some quoted text

Я должен указать переменную окружения метод туннелирования (endlocal & set ret =% thestring%) к Тиму Хиллу, «Сценарии оболочки Windows NT» . Это единственная книга, которую я когда-либо нашел, которая рассматривает командные файлы с любой глубиной.

55
ответ дан 27 November 2019 в 03:22
поделиться

Brute Принудительный метод:

echo "foo <3 bar" | sed -e 's/\(^"\|"$\)//g'

Для этого, конечно же, требуется найти подходящую версию sed для Win32.

0
ответ дан 27 November 2019 в 03:22
поделиться

http://unxutils.sourceforge.net/ - это собственный win32-порт набора утилит GNU, включая sed, gawk, grep и wget. (извините, что у меня недостаточно представителей для публикации этого комментария!)

0
ответ дан 27 November 2019 в 03:22
поделиться

Это превратит «C: \ Program Files \ somefile.txt» в C: \ Program Files \ somefile.txt сохраняя при этом такие случаи, как Height = 5'6 " и Symbols =" ! @ #

:DeQuote

SET _DeQuoteVar=%1
CALL SET _DeQuoteString=%%!_DeQuoteVar!%%
IF [!_DeQuoteString:~0^,1!]==[^"] (
IF [!_DeQuoteString:~-1!]==[^"] (
SET _DeQuoteString=!_DeQuoteString:~1,-1!
) ELSE (GOTO :EOF)
) ELSE (GOTO :EOF)
SET !_DeQuoteVar!=!_DeQuoteString!
SET _DeQuoteVar=
SET _DeQuoteString=
GOTO :EOF

Пример

SetLocal EnableDelayedExpansion
set _MyVariable = "C:\Program Files\ss64\"
CALL :dequote _MyVariable
echo %_MyVariable%
2
ответ дан 27 November 2019 в 03:22
поделиться

Приведенный выше ответ (начиная с: DeQuote) предполагает, что отложенное расширение переменной среды включено. From cmd / ?:

Задержка расширения переменной среды по умолчанию НЕ включена. Вы может включить или отключить отложенное расширение переменной среды для конкретный вызов CMD.EXE с ключом / V: ON или / V: OFF. Вы может включить или отключить завершение для всех вызовов CMD.EXE на сеанс входа в систему компьютера и / или пользователя путем установки одного или обоих параметров следующие значения REG_DWORD в реестре с использованием REGEDT32.EXE: от

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion

    and/or

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion

до 0x1 или 0x0. Пользовательский параметр имеет приоритет над настройка машины. Ключи командной строки имеют приоритет над параметры реестра.

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

2
ответ дан 27 November 2019 в 03:22
поделиться