2008-09-09 14 views
5

मैं अप करने के लिए 4 इस संरचना (ध्यान दें उपसर्गों तिथियां दी गई हैं)खुला एक बैच फ़ाइल का उपयोग करके फ़ाइलें की एक श्रृंखला में से एक

  • 0830filename.txt
  • 0907filename.txt
  • 0914filename के आधार पर फ़ाइलें .txt
  • 0921filename.txt

मैं हाल ही में एक (0921filename.txt) खोलना चाहते हैं। बैच फ़ाइल में मैं इसे कैसे कर सकता हूं?

धन्यवाद।

उत्तर

9

इस विधि वास्तविक फ़ाइल संशोधन दिनांक का उपयोग करता है, यह पता लगाने की एक नवीनतम फ़ाइल है जो -alphabetic आदेश) है, इसलिए यदि फ़ाइल नाम संगत कर रहे हैं - यह काम करेगा:

@echo off 
for /F %%i in ('dir /B *.txt^|sort /R') do (
    call :open "%%i" 
    exit /B 0 
) 
:open 
    start "dummy" "%~1" 
exit /B 0 

आप वास्तव में चयन करने के लिए कौन सी विधि आप के लिए बेहतर है।

+0

क्या आप मुझे बता सकते हैं कि लाइन 2 में %% क्या करता है और% 7 1 लाइन 7 में क्या करता है? धन्यवाद! – Keng

+0

%% मैं लूप वैरिएबल है (यह प्रत्येक पंक्ति में पहले शब्द का मान प्राप्त करेगा जो कि मानक आउटपुट में कोष्ठक के अंदर कमांड लिखता है)। % 1 स्क्रिप्ट या लेबल (जैसे मेरे मामले में) को दिए गए कमांड लाइन तर्क तक पहुंचने का एक आसान तरीका है। % ~ 1, हालांकि, उद्धरण हटा देता है (यदि कोई है)। – Paulius

+0

विल्नीयस, लिथुआनिया ...? .... हम्मम्म ... मैं वहां एक प्रोग्रामर जानता हूं ... गिंटारस डिज्जगाल्विस, वह क्विकमैक्रोस (http://QuickMacros.com) बनाता है। आपको उसे कभी-कभी देखना चाहिए। – Keng

-1

प्रासंगिक पूर्णांक को पार्स करने और उनकी तुलना करने के लिए नियमित अभिव्यक्ति का उपयोग करें।

+0

मुझे लगता है कि प्रश्न में निहित है कि वह केवल चीजें हैं जो होगा उपयोग करना चाहता है एक कमांड लाइन से उपलब्ध हो।क्या आप एक कमांड लाइन आरई उपकरण के बारे में जानते हैं जो विंडोज़ पर उपलब्ध होगा? –

1

यहां आप जाते हैं ... (उम्मीद है कि मुझे कोई भी इसे हरा नहीं देगा ...) (आपको फ़ाइल को lasttext.bat या कुछ के रूप में सहेजने की आवश्यकता होगी) यह सबसे पुराना .txt खोल देगा/चलाएगा फ़ाइल

dir *.txt /b /od > systext.bak 
FOR /F %%i in (systext.bak) do set sysRunCommand=%%i 
call %sysRunCommand% 
del systext.bak /Y 

शायद एक्सपी केवल। डॉस की शक्तिशाली शक्ति BeHOLD।
हालांकि यह नवीनतम फ़ाइल नाम तारीख तक लेता है - फाइलनाम द्वारा नहीं ..

यदि आप नवीनतम फ़ाइल नाम प्राप्त करना चाहते हैं, तो बदलें/od चालू/चालू करें।
यदि आप किसी और चीज को सॉर्ट करना चाहते हैं, तो दूसरी पंक्ति में "सॉर्ट" कमांड जोड़ें। , रिवर्स में

@echo off 
for /F %%i in ('dir /B /O:-D *.txt') do (
    call :open "%%i" 
    exit /B 0 
) 
:open 
    start "dummy" "%~1" 
exit /B 0 

इस विधि, तथापि, वर्णमाला क्रम में पिछले फ़ाइल चुनता है (या पहले एक:

+1

आपकी विधि काम करेगी, लेकिन यह अनावश्यक अस्थायी फ़ाइलें बनाएगी। साथ ही, बैच स्क्रिप्ट में डेल का उपयोग करते समय, मैं हमेशा/वाई स्विच जोड़ता हूं - अन्यथा डेल कमांड बहुत परेशान हो सकता है ... :) – Paulius

+0

अच्छी कॉल - मैं संपादित करूँगा। – seanyboy

4

एक लाइनर, का उपयोग कर बाहर निकलें चाल:

FOR /F %%I IN ('DIR *.TXT /B /O:-D') DO NOTEPAD %%I & EXIT 

संपादित करें:

@pam: आप सही कर रहे हैं, मैं यह सोचते गया था कि फ़ाइलों तारीख क्रम में थे, लेकिन आप बदल सकते हैं आदेश:

FOR /F %%I IN ('DIR *.TXT /B /O:-N') DO NOTEPAD %%I & EXIT 

तब आपके पास नाम से क्रमबद्ध फ़ाइल सूची क्रमबद्ध क्रम में है।

6

क्षमा करें, इस प्रश्न को स्पैम करने के लिए, लेकिन मुझे वास्तव में पोस्ट करने जैसा लगता है वास्तविक उत्तर। आप करने के लिए अपने बैच स्क्रिप्ट पार्स और तुलना फ़ाइल नाम में दिनांक, तो आप कुछ इस तरह का उपयोग कर सकते हैं:

@echo off 

rem Enter the ending of the filenames. 
rem Basically, you must specify everything that comes after the date. 
set fn_end=filename.txt 

rem Do not touch anything bellow this line. 
set max_month=00 
set max_day=00 

for /F %%i in ('dir /B *%fn_end%') do call :check "%%i" 
call :open %max_month% %max_day% 
exit /B 0 

:check 
    set name=%~1 
    set date=%name:~0,4% 
    set month=%date:~0,2% 
    set day=%date:~2,2% 
    if /I %month% GTR %max_month% (
     set max_month=%month% 
     set max_day=%day% 
    ) else if /I %month% EQU %max_month% (
     set max_month=%month% 
     if /I %day% GTR %max_day% (
      set max_day=%day% 
     ) 
    ) 
exit /B 0 

:open 
    set date=%~1 
    set month=%~2 
    set name=%date%%month%%fn_end% 
    start "dummy" "%name%" 
exit /B 0 
+0

मैं इस समय डॉट नहीं करता लेकिन डांग अगर यह अच्छा नहीं है !! – Keng

+0

मैन! क्या आप इस तरह की चीजें लिखने के लिए सीखने पर किसी भी अच्छी किताबों के बारे में जानते हैं ?! – Keng

+0

आप शायद इस प्रश्न का उत्तर भी दे सकते हैं! http://beta.stackoverflow.com/questions/51054/batch-file-to-delete-files-older-than-n-days – Keng