Windows 스크립트의 명명 된 환경 변수에서 따옴표 제거
Windows 환경 변수에 URL 접두사를 저장하고 싶습니다. 하지만 쿼리 문자열의 앰퍼샌드로 인해이 문제가 발생합니다.
예 : URL 접두사가 http://example.com?foo=1&bar=
있고 bar
매개 변수 값을 제공하여 전체 URL을 만들고 싶습니다 . 그런 다음 "start"명령을 사용하여 해당 URL을 시작하고 싶습니다.
SET 연산의 값 주위에 따옴표를 추가하는 것은 간단합니다.
set myvar="http://example.com?foo=1&bar="
Windows는 실제 값에 따옴표를 포함합니다 (Windows 감사합니다!).
echo %myvar%
"http://example.com?foo=1&bar=true"
물결표를 사용하여 배치 파일 인수에서 따옴표를 제거 할 수 있다는 것을 알고 있습니다.
echo %~1
그러나 명명 된 변수에 대해 수행 할 수없는 것 같습니다.
echo %~myvar%
%~myvar%
이를 수행하기위한 구문은 무엇입니까?
이것은 환경 변수의 제한이 아니라 명령 셸입니다.
전체 과제를 따옴표로 묶습니다.
set "myvar=http://example.com?foo=1&bar="
이것을 반향하려고 시도하면 쉘이 거기에서 휴식을 취하기 때문에 불평합니다.
var 이름을 따옴표로 묶어 에코 할 수 있습니다.
echo "%myvar%"
또는 더 나은 방법은 set 명령을 사용하여 내용을 보는 것입니다.
set myvar
에코 % myvar : "= %
이것은 작동합니다
for %a in (%myvar%) do set myvar=%~a
따옴표없이 앰퍼샌드가 포함 된 변수를 인쇄하려는 경우에도 이것을 사용합니다.
for %a in ("fish & chips") do echo %~a
이미 몇 가지 좋은 답변이 있지만 따옴표를 제거하는 또 다른 방법은 간단한 서브 루틴을 사용하는 것입니다.
:unquote
set %1=%~2
goto :EOF
다음은 전체 사용 예입니다.
@echo off
setlocal ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS
set words="Two words"
call :unquote words %words%
echo %words%
set quoted="Now is the time"
call :unquote unquoted %quoted%
echo %unquoted%
set word=NoQuoteTest
call :unquote word %word%
echo %word%
goto :EOF
:unquote
set %1=%~2
goto :EOF
변수에서 시작 및 끝 따옴표 만 제거하려면 :
SET myvar=###%myvar%###
SET myvar=%myvar:"###=%
SET myvar=%myvar:###"=%
SET myvar=%myvar:###=%
이것은 값 내에 ### "또는"###이 없다고 가정하고 변수가 NULL이면 작동하지 않습니다.
이 방법에 대한 크레딧은 http://ss64.com/nt/syntax-esc.html 로 이동합니다 .
지연된 환경 변수 확장을 사용하고! var : ~ 1, -1! 따옴표를 제거하려면 :
@echo off
setlocal enabledelayedexpansion
set myvar="http://example.com?foo=1&bar="
set myvarWithoutQuotes=!myvar:~1,-1!
echo !myvarWithoutQuotes!
Use multiple variables to do it:
set myvar="http://example.com?foo=1&bar="
set bar=true
set launch=%testvar:,-1%%bar%"
start iexplore %launch%
@echo off
set "myvar=http://example.com?foo=1&bar="
setlocal EnableDelayedExpansion
echo !myvar!
This is because the variable contains special shell characters.
I think this should do it:
for /f "tokens=*" %i in (%myvar%) do set %myvar%=%~i
But you do not need this,
set myvar="http://example.com?foo=1&bar="
start "" %myvar%
Will work too, you just need to supply a title to the start command.
ReferenceURL : https://stackoverflow.com/questions/307198/remove-quotes-from-named-environment-variables-in-windows-scripts
'programing' 카테고리의 다른 글
Laravel 5.2-pluck () 메서드는 배열을 반환합니다. (0) | 2021.01.14 |
---|---|
React Hooks useEffect에서 oldValues와 newValues를 비교하는 방법은 무엇입니까? (0) | 2021.01.14 |
SQL 형식화 표준 (0) | 2021.01.14 |
Java Swing에 사용할 수있는 좋은 무료 날짜 및 시간 선택기가 있습니까? (0) | 2021.01.14 |
백그라운드 작업자를 완전히 "죽이는"방법은 무엇입니까? (0) | 2021.01.14 |