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