2012-08-22 8 views
8

मैं अपने Windows बैच फ़ाइल के अंदर निम्न स्ट्रिंग है:एक Windows बैच फ़ाइल में एक स्ट्रिंग से पहली और आखिरी चरित्र निकालें

"-String" 

स्ट्रिंग भी शुरुआत में और के अंत में twoe उद्धरण चिह्न शामिल स्ट्रिंग, जैसा कि यह ऊपर लिखा गया है।

मैं पहली और आखिरी पात्रों उन्हें हटाना चाहते हैं, जिससे कि मैं निम्न स्ट्रिंग मिलती है:

-String 

मैं इस कोशिश की:

set currentParameter="-String" 
echo %currentParameter:~1,-1% 

इस स्ट्रिंग बाहर प्रिंट के रूप में यह होना चाहिए:

-String 

लेकिन जब मैं इस तरह की संपादित स्ट्रिंग को स्टोर करने का प्रयास करता हूं, तो यह विफल रहता है:

set currentParameter="-String" 
set currentParameter=%currentParameter:~1,-1% 
echo %currentParameter% 

कुछ भी मुद्रित नहीं हो जाता है। मुझसे क्या गलती हुई है?


यह वास्तव में अजीब है। जब मैं इस तरह वर्ण निकालने यह काम करता है:

set currentParameter="-String" 
set currentParameter=%currentParameter:~1,-1% 
echo %currentParameter% 

इसे बाहर प्रिंट:

-String 

लेकिन वास्तव में मेरे बैच में थोड़ा और अधिक जटिल है और वहाँ यह काम नहीं करता। मैं दिखा देंगे कि मैं क्या प्रोग्राम किया:

@echo off 

set string="-String","-String2" 

Set count=0 
For %%j in (%string%) Do Set /A count+=1 


FOR /L %%H IN (1,1,%COUNT%) DO ( 

    echo . 
     call :myFunc %%H 
) 
exit /b 

:myFunc 
FOR /F "tokens=%1 delims=," %%I IN ("%string%") Do (

    echo String WITHOUT stripping characters: %%I 
    set currentParameter=%%I 
    set currentParameter=%currentParameter:~1,-1% 

    echo String WITH stripping characters: %currentParameter% 

    echo . 

) 
exit /b 

:end 

और उत्पादन होता है:

. 
String WITHOUT stripping characters: "-String" 
String WITH stripping characters: 
. 
. 
String WITHOUT stripping characters: "-String2" 
String WITH stripping characters: ~1,-1 
. 

लेकिन क्या मैं चाहता है:

. 
String WITHOUT stripping characters: "-String" 
String WITH stripping characters: -String 
. 
. 
String WITHOUT stripping characters: "-String2" 
String WITH stripping characters: -String2 
. 
+0

आपका नमूना काम करता है (उम्मीद के रूप में), वहाँ एक और बग होना चाहिए । शायद आपने इसे ब्लॉक के अंदर करने की कोशिश की? – jeb

+0

मुझे निम्न संदेश मिलता है: 'ईसीएचओ आईएसटी ऑउजेस्काल्टेट (OFF)। ~ 1, -1' – Metalhead89

+0

शायद ऐसा इसलिए है क्योंकि यह एक समारोह में है? ': myFunc /एफ" टोकन =% 1 delims =, "%% के लिए मैं में ("% processChain1% ") दो ( \t सेट currentParameter = %% मैं \t सेट currentParameter =% currentParameter: ~ 1 , -1% \t गूंज% currentParameter% \t रेम जावा जार app.jar %% मैं ) बाहर निकलें/b' – Metalhead89

उत्तर

4

आप एक parenthesized ब्लॉक के अंदर एक चर modyfing कर रहे हैं। देखें - नया मान उसी ब्लॉक के भीतर उपयोग नहीं किया जाएगा (जब तक कि आप% के बजाय वैरिएबल को सीमित नहीं करते हैं - और enableelayedexpansion मोड में चल रहे हैं)। या सिर्फ एक दूसरे उप-समारोह में लाइनों की जोड़ी को निकालने, लाइनों की एक सादे अनुक्रम का उपयोग,()

स्वागत करती है के insted Stach

4

आशा तुम्हारी मदद करेगा। वर्ण अलग करना बिना गूंज स्ट्रिंग: %% मैं

set currentParameter=%%I 
set currentParameter=!currentParameter:~1,-1! 

echo String WITH stripping characters: !currentParameter! 

echo . 

यह काम हो सकता है। इसे एक बार कोशिश करें।

2

यह स्क्रिप्ट ENABLEDELAYEDEXPANSION का लाभ उठाती है। यदि आप नहीं जानते हैं, तो बैच स्क्रिप्ट निष्पादित करें और यदि सभी एक में आदेश दें; इसलिए यदि आप कार्य करें:

if true==true (
@echo off 
set testvalue=123 
echo %testvalue% 
pause >NUL 
) 

आप उत्पादन कुछ भी अभ्यस्त, क्योंकि जब गूंज% testvalue% निष्पादित किया जाता है, यह मान्यता प्राप्त नहीं है testvalue बदल दिया गया है। देरी से निष्पादन का उपयोग करके स्क्रिप्ट को उस मान को पढ़ने के लिए अनुमति मिलती है, और इससे पहले कि मैंने पहले कहा था। आप इसे% testvalue% की तरह उपयोग करते हैं, लेकिन आप कर सकते हैं! Testvalue! इसे ठीक करने के:

if true==true (
@echo off 
set testvalue=123 
echo !testvalue! 
pause >NUL 
) 
  • गूंज चाहेंगे 123.

@echo off 
SETLOCAL ENABLEDELAYEDEXPANSION 
set string="-String","-String2" 
Set count=0 

For %%j in (%string%) Do Set /A count+=1 

FOR /L %%H IN (1,1,%COUNT%) DO ( 
echo . 
call :myFunc %%H 
) 

exit /b 
:myFunc 

FOR /F "tokens=%1 delims=," %%I IN ("%string%") Do (
echo String WITHOUT stripping characters: %%I 
set currentParameter=%%I 
set currentParameter=!currentParameter:~1,-1! 
echo String WITH stripping characters: !currentParameter! 
echo . 
) 

exit /b 
:end 

~ एलेक्स

संबंधित मुद्दे