2008-11-20 8 views
49

मैं एक विंडोज वातावरण चर में एक यूआरएल उपसर्ग स्टोर करना चाहता हूं। क्वेरी स्ट्रिंग में एम्पर्सेंड हालांकि यह परेशानी बनाते हैं।विंडोज स्क्रिप्ट्स में नामित पर्यावरण चर से उद्धरण निकालें

उदाहरण के लिए: मेरे पास http://example.com?foo=1&bar= का यूआरएल उपसर्ग है और bar पैरामीटर के लिए मूल्य प्रदान करके एक पूर्ण यूआरएल बनाना चाहता है। मैं फिर "प्रारंभ" कमांड का उपयोग कर उस यूआरएल को लॉन्च करना चाहता हूं।

सेट ऑपरेशन के लिए मूल्य-पीछे उद्धरण चिह्न जोड़ना आसान पर्याप्त है: हालांकि (! धन्यवाद विंडोज)

set myvar="http://example.com?foo=1&bar=" 

विंडोज वास्तविक मूल्य में उद्धरण शामिल हैं:

echo %myvar% 
"http://example.com?foo=1&bar=true" 

मुझे पता है कि मैं टिल्ड का उपयोग करके बैच फ़ाइल तर्क से बोलियां दूर पट्टी कर सकते हैं:

echo %~1 

हालांकि, मैं नामित चरों को यह करने के लिए प्रतीत नहीं कर सकते हैं:

echo %~myvar% 
%~myvar% 

इस पूरा करने के लिए वाक्य रचना क्या है?

+11

शायद ही कभी, एक सवाल अकेले मुझे मेरे वर्तमान समस्या को हल करने में मदद करता है (एक बैच फ़ाइल तर्क से बोलियां पट्टी करने के लिए कैसे)। यहाँ, यह किया। धन्यवाद और +1 :-) – Jan

+0

वही, धन्यवाद! –

उत्तर

26

यह पर्यावरण चर की सीमा नहीं है, बल्कि कमांड खोल है।

उद्धरण में पूरे काम संलग्न करें:

set "myvar=http://example.com?foo=1&bar=" 

अगर आप इस प्रतिध्वनित करने के लिए प्रयास करते हैं, यह शिकायत हालांकि के रूप में खोल वहाँ में एक को तोड़ने देखेंगे।

आप उद्धरण में वर नाम बंद करके यह गूंज कर सकते हैं:

set myvar 
+0

बहुत उपयोगी धन्यवाद। सेट "myVar = http: //example.com foo = 1 & बार =" –

+0

चाहिए सेट/पी के साथ इस काम करता है? मैं एसईटी/पी "var = सवाल" कोशिश करता हूं। var तब "रिक्त स्थान के साथ मेरी प्रतिक्रिया" के बराबर है – RoboJ1M

-1

मुझे लगता है कि यह यह करना चाहिए:

for /f "tokens=*" %i in (%myvar%) do set %myvar%=%~i 

लेकिन आप इस की जरूरत नहीं है,

set myvar="http://example.com?foo=1&bar=" 
start "" %myvar% 

भी काम करेगा, तो आप सिर्फ शुरुआत आदेश करने के लिए एक शीर्षक देना होगा।

+0

प्रारंभ कमांड काम नहीं करता है। यूआरएल में एम्पर्सेंड लाइन को समाप्त करता है, इस प्रकार अंतिम यूआरएल पैरा को छोड़ देता है। यह ब्राउज़र लॉन्च करता है लेकिन यह गलत यूआरएल है। –

35

गूंज% myVar:: "=%

echo "%myvar%" 

या बेहतर, बस सामग्री देखने के लिए सेट आदेश का उपयोग करें

+5

एक कम terse उत्तर http://stackoverflow.com/a/5181182/508355 – hashchange

+8

पर उपलब्ध है, यह सभी उद्धरणों को हटा देगा, न केवल आसपास के उद्धरण ... –

+0

यह एक है मेरे लिए एक अच्छा @zdan के रूप में अच्छा सुझाव दिया। –

2

उपयोग वातावरण चर विस्तार में देरी और प्रयोग var:! ~ 1, -1 उद्धरण दूर करने के लिए:

@echo off 
setlocal enabledelayedexpansion 
set myvar="http://example.com?foo=1&bar=" 
set myvarWithoutQuotes=!myvar:~1,-1! 
echo !myvarWithoutQuotes! 
1

उपयोग एकाधिक चर यह करने के लिए:

SET myvar=###%myvar%### 
SET myvar=%myvar:"###=% 
SET myvar=%myvar:###"=% 
SET myvar=%myvar:###=% 

इसका मतलब यह है कि आप एक ### "या" नहीं है:

set myvar="http://example.com?foo=1&bar=" 

set bar=true 

set launch=%testvar:,-1%%bar%" 

start iexplore %launch% 
+0

उम ... 'myvar' या' testvar' या क्या? –

2

केवल शुरुआत और एक चर से बोलियां समाप्त होने को निकालने के लिए ### आपके मान के अंदर, और वैरिएबल न्यूल होने पर काम नहीं करता है।

क्रेडिट इस विधि के लिए http://ss64.com/nt/syntax-esc.html को जाता है।

9

यह

for %a in (%myvar%) do set myvar=%~a 

अगर मैं उद्धरण चिह्नों के बिना एक चर कि निहित और एम्परसेंड मुद्रित करने के लिए चाहता था मैं भी इस का प्रयोग करेंगे काम करता है।

@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 
6

जबकि वहाँ कई अच्छा जवाब पहले से ही हैं, उद्धरण दूर करने के लिए एक और तरीका है एक सरल सबरूटीन उपयोग करने के लिए है ऐसा इसलिए है क्योंकि चर में विशेष खोल वर्ण होते हैं।

+0

खुशी है कि किसी को इस बात का किसी और सोचा है, हालांकि, गहरी सोच - चर उद्धरण नहीं है, तो क्या? मौजूदा var truncating के बजाय, जल्दी abort चेक होना अच्छा लगेगा ... – BrainSlugs83

+0

% ~ 2 किसी भी आसपास के उद्धरण हटा देता है। यदि कोई उद्धरण नहीं है तो यह छोटा नहीं होता है। – jimhark

+0

क्या 'रेम सेट% 1 =% ~ 2' के लिए है? ऐसा लगता है कि अगली पंक्ति के डुप्लिकेट की टिप्पणी की गई है। इसके अलावा, यदि चर की सामग्री उद्धृत नहीं की जाती है और इसमें कोई स्थान होता है, तो यह पहली जगह के बाद सबकुछ कम कर देता है। जब तक मैंने कुछ गलत नहीं किया है, तो यह फ़ाइल नामों से निपटने के लिए यह अनुपयुक्त प्रतीत होता है। – jpmc26

0
@echo off 
set "myvar=http://example.com?foo=1&bar=" 
setlocal EnableDelayedExpansion 
echo !myvar! 

:

:unquote 
    set %1=%~2 
    goto :EOF 

यहां एक संपूर्ण उपयोग उदाहरण है:

for %a in ("fish & chips") do echo %~a 
संबंधित मुद्दे