/ / लूप वेरिएबल के लिए बैच फ़ाइल के मान को कैसे स्टोर और उपयोग किया जाए - विंडोज़, बैच-फाइल

लूप वेरिएबल के लिए बैच फ़ाइल के मान को कैसे स्टोर और उपयोग करें - विंडोज़, बैच-फ़ाइल

मेरे पास एक विंडोज़ बैच फ़ाइल है जहाँ मैं एक निर्देशिका ट्री के भीतर दिए गए नाम के साथ हर फाइल पर कुछ ऑपरेशन करने की कोशिश कर रहा हूँ।

for /f "delims=" %%i in ("dir /s %1 ^| findstr /c:"Directory of"") do (
set dir=%%i
echo i = %%i
echo dir = %dir:~14%
)

मेरी परेशानी यह हे कि मे dir लूप के लिए हमेशा अंतिम तत्व के बराबर होता है। तो मुझे इस तरह का आउटपुट मिल सकता है। (स्पष्टता के लिए संरेखण जोड़ा गया)

i = Directory of c:alphamyfile.txt
dir =            c:charliemyfile.txt
i = Directory of c:bravomyfile.txt
dir =            c:charliemyfile.txt
i = Directory of c:charliemyfile.txt
dir =            c:charliemyfile.txt

इसलिए dir "अल्फा" या "चार्ली" के बराबर कभी नहीं होता है।

मैं जिस कार्यक्षमता की तलाश कर रहा हूं उसे प्राप्त करने के लिए मुझे क्या करने की आवश्यकता है?

उत्तर:

जवाब के लिए 0 № 1

प्रयत्न:

for /f "delims=" %%i in ("dir /s %1 ^| findstr /c:"Directory of"") do (
set dir=%%i
echo i = %%i
call :process
)

goto :eof

:process
echo dir = %dir:~14%
goto :eof

ध्यान दें कि आंतरिक सबरूटीन के भीतर :process, %%i उपलब्ध नहीं है । को call :process बृहदान्त्र की आवश्यकता है और goto :eof मतलब भौतिक अंत-फ़ाइल पर जाएं (जो सबरूटीन को समाप्त करता है) जहां कोलन की आवश्यकता होती है लेकिन :EOF समझा जाता है और एक लेबल के रूप में असाइन नहीं किया जाना चाहिए।

शायद बेहतर होगा

for /f "delims=" %%i in ("dir /s /b %1") do (
set dir=%%i
echo i = %%i
call :process
)

goto :eof

:process
echo dir = %dir%
goto :eof

YMMV


जवाब के लिए 0 № 2

दो उदाहरण:

for /f "tokens=2*" %%a in ("dir /s ^|findstr /bc:" Directory of"") do echo %%~b

for /r %%a in (.) do echo %%~fa

जवाब के लिए 0 № 3

यह पथ और पूर्ण फाइलस्पेक की रिपोर्ट करता है।

@echo off
for /r %%a in (myfile.txt) do echo "%%~dpa" and full path is "%%a" & pause