, मैं संख्यात्मक मान कैसे पैड करूं, ताकि 0.99 की श्रेणी में दिया गया मान "00" से "99" श्रेणी में एक स्ट्रिंग में परिवर्तित हो जाए। अर्थात। मैं अग्रणी शून्य वहाँ एक दो चरणों वाली प्रक्रिया का उपयोग कर सकते है की तुलना में 10विंडोज बैच फ़ाइलों में स्ट्रिंग प्रसंस्करण: अग्रणी शून्य के साथ पैड मूल्य कैसे करें? Windows12d बैच फ़ाइल (.bat) में
उत्तर
कम मूल्यों के लिए होने के लिए करना चाहते हैं:
REM initial setup
SET X=5
REM pad with your desired width - 1 leading zeroes
SET PADDED=0%X%
REM slice off any zeroes you don't need -- BEWARE, this can truncate the value
REM the 2 at the end is the number of desired digits
SET PADDED=%PADDED:~-2%
अब TEMP
गद्देदार मूल्य रखती है। अगर कोई संभावना है कि अधिक से अधिक 2 अंक हो सकता है X
का प्रारंभिक मूल्य है, तो आप जांच करने की आवश्यकता है कि आप गलती से इसे काट-छांट नहीं की थी:
REM did we truncate the value by mistake? if so, undo the damage
SET /A VERIFY=1%X% - 1%PADDED%
IF NOT "%VERIFY%"=="0" SET PADDED=%X%
REM finally update the value of X
SET X=%PADDED%
महत्वपूर्ण नोट:
यह समाधान बनाता है या चर PADDED
और VERIFY
को ओवरराइट करता है। कोई भी स्क्रिप्ट जो वेरिएबल्स के मान सेट करती है जो इसे समाप्त होने के बाद बनाए रखने के लिए नहीं हैं, इन परिवर्तनों को बाहरी दुनिया से दिखाई देने से रोकने के लिए SETLOCAL
और ENDLOCAL
कथनों के अंदर रखा जाना चाहिए।
इस उत्तर के साथ दो समस्याएं हैं। 1) आपको किसी चर नाम के रूप में कभी भी TEMP का उपयोग नहीं करना चाहिए। यह इंगित करने के लिए आरक्षित है कि temp फ़ाइलों को कहाँ संग्रहीत किया जाता है। मूल्य ओवरराइड करने से कहीं और कोड तोड़ सकता है। 2) ट्रंकेशन ब्रेक के लिए आपका परीक्षण यदि आपकी मूल संख्या का अग्रणी अंक 9 या 8 है क्योंकि एसईटी/ए हेक्साडेसिमल के रूप में शून्य के साथ प्रीफ़िक्स किए गए नंबरों का इलाज करता है, और 08 और 09 परिणामस्वरूप त्रुटि होती है क्योंकि वे अमान्य हेक्स नोटेशन हैं। – dbenham
@ डेबेनहम: "जाहिर है" यह पूरी तरह से encapsulated समाधान नहीं है, और पर्यावरण चर सेट करने वाले किसी भी कोड की तरह इसे 'सेटलोकल'/'एंडलोकल 'के अंदर रखा जाना होगा। क्या आपको लगता है कि यह वर्तनी होनी चाहिए? शून्य उपसर्ग के बारे में, मुझे नहीं पता था - जांच करेगा। – Jon
@ डेबेनहम: कुछ विचारों के बाद मुझे ऐसा लगता है कि घटने से पहले दोनों नंबरों को '1' के साथ उपसर्ग करना चाल चल जाएगा। कच्चे लेकिन प्रभावी। – Jon
इस उदाहरण प्रदर्शित करने के लिए एक for
पाश का उपयोग करता है, लेकिन तर्क ही आप पाश के बिना इसका इस्तेमाल करने के लिए गए थे, भले ही है। बस echo
सामने एक 0
यदि संख्या कम से कम 10.
setlocal enabledelayedexpansion
for /l %%a in (1,1,40) do (
set n=%%a
if !n! lss 10 (
echo 0!n!
) else (
echo !n!
)
)
pause >nul
वास्तव में यह जॉन की जवाब के रूप में एक ही तर्क नहीं है। आपका समाधान ठीक काम करता है अगर आप केवल 2 अंकों के लिए पैड करना चाहते हैं। लेकिन यह के रूप में आप पैड अतिरिक्त शून्य बोझिल हो जाता है। – dbenham
@dbenham ओपी 'कहा कि मैं करना चाहते हैं 10.' की तुलना में कम मूल्यों के लिए अग्रणी शून्य होने - तो कैसे वहाँ कभी होगा अधिक से अधिक 2 अंकों की?मेरा मतलब यह नहीं था कि यह जॉन के जवाब से तुलना करें, मैं अपना जवाब संपादित करूंगा। –
आह, अब मैं देखता हूं कि मैंने आपकी भाषा का गलत व्याख्या कैसे किया। यह सच है कि प्रश्न में विस्तार 2 अंक निर्दिष्ट करता है, लेकिन शीर्षक अधिक सामान्य है। और सामान्य समाधान के रूप में सरल होने पर सामान्य समाधान होना हमेशा अच्छा होता है। – dbenham
है आपको विश्वास है कि अपने मूल संख्या में अंकों की संख्या हमेशा 2 से कम है, तो
set "x=0%x%"
set "x=%x:~-2%"
तो
हैं संख्या तो 2 अंक से अधिक हो सकता है, और आप 2 अंक के लिए पैड चाहते हैं, लेकिन नहीं काटना मूल्यों बड़ा तो 99,
setlocal enableDelayedExpansion
if "%x%" equ "%x:~-2%" (
set "x=0%x%"
set "x=!x:~-2!"
)
या देरी विस्तार के बिना, एक मैं का उपयोग कर ntermediate चर
set paddedX=0%x%
if "%x%" equ "%x:~-2%" set "x=%paddedX:~-2%"
ऊपर एल्गोरिदम के बारे में अच्छी बात यह है कि यह किसी भी मनमाने ढंग से चौड़ाई को गद्दी का विस्तार करने के तुच्छ है। उदाहरण के लिए, पैड करने के लिए 10 चौड़ाई के लिए, बस 9 शून्य से पहले जोड़ें और पिछले 10 अक्षर
set "x=000000000%x%"
set "x=%x:~-10%"
set paddedX=000000000%x%
if "%x%" equ "%x:~-10%" set "x=%paddedX:~-10%"
यदि आप चाहते हैं, तो आप ब्लॉक के लिए 'setlocal enableDelayedExpansion' को hte के अंदर रख सकते हैं, इसलिए जब तक आपको इसकी आवश्यकता न हो तब तक यह तब तक नहीं बदलेगा। –
पिछला जवाब छोटा रोकने के लिए पैड के साथ एक मूल्य के लिए सभी बराबर के तरीकों के बारे में बताया था की रक्षा बाएं शून्य; मैं बस एक छोटी सी चाल जोड़ना चाहता हूं जिसे मैं इसे आसान तरीके से करने के लिए करता था। पिछले उत्तरों में पर्याप्त उल्लेख नहीं किया गया था कि ज्यादातर मामलों में, पैड किए गए मान को लूप के अंदर बढ़ाया जाता है और यह कि पैड किए गए मान का उपयोग इसे (या समान कार्य, जैसे नामों) को प्रदर्शित करने के लिए किया जाता है। उदाहरण के लिए, 00 से 99 करने के लिए मूल्यों को दिखाने के लिए:
set x=0
:loop
rem Pad x value, store it in padded
set padded=0%x%
set padded=%padded:~-2%
rem Show padded value
echo %padded%
set /A x+=1
if %x% leq 99 goto loop
यदि यह मामला है, चर के मूल्य के लिए इस्तेमाल किया जा सकता दोनों पाश को नियंत्रित और कोई संशोधन इसकी सीमाओं अगर साथ अपने गद्देदार मान प्रदर्शित उचित अनुवाद किया जाता है।उदाहरण के लिए, 00 से 99 से मूल्यों को दिखाने के लिए:
set x=100
:loop
rem Show padded value
echo %x:~-2%
set /A x+=1
if %x% leq 199 goto loop
इस विधि पैड के लिए छोड़ दिया शून्य के किसी भी संख्या के साथ भी काम करता है।
एंटोनियो
अंत में, सही उत्तर – thefoyer
@echo off
rem .
rem counter example - with and without padding (up to 260 leading 0s which should be enough for most filenames)
rem .
rem we assume values given are valid
rem additional error checking could be done to make sure they are numbers
rem and to ensure that starting is less than ending
rem and that the number of ending digits is not greater than the number of padding digits
rem .
if "%2"=="" (
echo.
echo usage: %~nx0 [starting number] [ending number] [pad]
echo example: %~nx0 0 19 will output numbers 0 to 19 each on a new line
echo example: %~nx0 3 12 8 will output numbers 3 to 12 each on a new line padded to 8 digits
echo.
goto end
)
rem .
setlocal enabledelayedexpansion
if "%3"=="" (
for /l %%x in (%1, 1, %2) do (
echo.%%x
)
) else (
set "mynum="
for /l %%x in (%1, 1, %2) do (
call set "mynum=00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000%%x"
call set "mynum=%%mynum:~-%3%%"
call echo.%%mynum%%
)
)
:end
एकल लाइन
IF 1%Foo% LSS 100 SET Foo=0%Foo%
आप श्रेणी की संख्याएं आपके द्वारा निर्दिष्ट क्या चाहते हैं आप मिल जाएगा। यह सबसेट 0-9 में मानों को नहीं बदलता है अगर वे पहले से ही सिंगल-पैड हैं।
एक साधारण लूप अंक की मनमानी संख्या के लिए शून्य-पैड होगा। अच्छा और छोटा – mojo
ठीक है GUYS मुझे एक समाधान मिला है, जितना संभव हो उतना सरल इसे कम करना।
@echo off
title pad numbers
set num=0
set zero= 000
:loop
@set /a num=%num%+1
if /i %num% GTR 9 set zero= 00
if /i %num% GTR 99 set zero= 0
if /i %num% GTR 999 set zero=
echo %zero%%num%
goto loop
यह 4 अंकों का उपयोग करके आपकी गणना संख्या प्रदर्शित करेगा। लेकिन नीचे दिखाए गए अनुसार 2 अंकों का उपयोग करने के लिए कोड को बदला जा सकता है।
@echo off
title pad numbers
set num=0
set zero= 0
:loop
@set /a num=%num%+1
if /i %num% GTR 9 set zero=
echo %zero%%num%
goto loop
आप एक प्रदर्शन योग्य एकल चर के रूप में सेट करना चाहते हैं तो ...
@echo off
title pad numbers
set num=0
set zero= 0
:loop
@set /a num=%num%+1
if /i %num% GTR 9 set zero=
set %zero%%num%=number
echo %number%
goto loop
अगर आप इसे सेकंड में गणना करना चाहते हैं ...
@echo off
title pad numbers
set num=0
set zero= 0
:loop
@set /a num=%num%+1
if /i %num% GTR 9 set zero=
set %zero%%num%=number
echo %number%
ping localhost -n 2 >nul
goto loop
मैं इस आशा एक महान मदद ^^
- 1. विंडोज बैच फ़ाइल
- 2. विंडोज बैच फ़ाइल में सटीक स्ट्रिंग इको?
- 3. विंडोज बैच फ़ाइल - उपनिर्देशिका में सभी फ़ाइलों को सम्मिलित करें
- 4. विंडोज बैच
- 5. विंडोज बैच फ़ाइल
- 6. विंडोज बैच फ़ाइल -
- 7. विंडोज बैच फ़ाइल में टाइमर
- 8. विंडोज बैच फ़ाइल फ़ाइलों और फ़ोल्डरों
- 9. विंडोज बैच फ़ाइल
- 10. बैच/बीएटी - बैच/बीएटी फ़ाइल के साथ प्रॉक्सी सेटिंग्स बदलें
- 11. विंडोज बैच फ़ाइल && ऑपरेटर
- 12. विंडोज बैच फ़ाइलों में स्कैला स्क्रिप्ट
- 13. विंडोज बैच फ़ाइल
- 14. विंडोज बैच फ़ाइलों में एम्पर्सेंड से बचने
- 15. विंडोज बैच
- 16. बैच फ़ाइल
- 17. विंडोज बैच फ़ाइल (बीएटी)
- 18. विंडोज बैच फ़ाइल PHP फ़ाइल
- 19. बैच फ़ाइल
- 20. बैच फ़ाइल के बाद चल रही बैच फ़ाइल बैच फ़ाइल
- 21. में खिड़कियों बैच फ़ाइल
- 22. बैच फ़ाइल
- 23. बैच (.bat): पहली स्क्रिप्ट का नाम प्राप्त करें, वर्तमान में
- 24. mysqldump कमांड के लिए विंडोज बैच फ़ाइल
- 25. विंडोज बैच फ़ाइल में दो पंक्तियों में डबल कोटेड लाइन को कैसे विभाजित करें?
- 26. बैच फ़ाइल
- 27. बैच फ़ाइल
- 28. बैच छवि प्रसंस्करण cronjob php
- 29. बैच फ़ाइल की प्रतिलिपि फ़ाइलों
- 30. बैच फ़ाइल
रॉब वैन डेर वाउडे [कई अलग-अलग तरीकों की सूची] [http://www.robvanderwoude.com/battech_leadingzero.php) दोनों को जोड़ने और निकालने के लिए अपने पेशेवरों और विपक्ष के साथ ading-zeros। – Synetech