programing

Windows 스크립트의 명명 된 환경 변수에서 따옴표 제거

yoursource 2021. 1. 14. 23:24
반응형

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

반응형