2008-09-09 10 views
5

меня до 4 файлы на основе этой структуры (заметим, что префиксы даты)Открыть один из серии файлов, используя пакетный файл

  • 0830filename.txt
  • 0907filename.txt
  • 0914filename .txt
  • 0921filename.txt

Я хочу, чтобы открыть самый последний один (0921filename.txt). как я могу это сделать в пакетном файле?

Спасибо.

ответ

9

Этот метод использует фактическую дату изменения файла, чтобы выяснить, какой из них является последний файл:

@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 

Этот метод, однако, выбирает последний файл в алфавитном порядке (или первый один, в обратном направлении -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

Можете ли вы рассказать мне, что делает %% i в строке 2 и что делает% ~ 1 в строке 7? Благодаря! – Keng 2008-09-09 13:47:30

-1

Используйте регулярное выражение для разбора соответствующего целого числа и сравнения их.

+0

Я думаю, что это подразумевается в вопросе, что он хочет использовать вещи, которые будут только быть доступным из командной строки.Вы знаете инструмент командной строки командной строки, который будет доступен в Windows? – 2008-09-09 13:50:35

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 

Возможно, только XP. BEHOLD Могущественная сила DOS.
Хотя это берет последнее имя файла по дате - НЕ по имени файла.

Если вы хотите получить последнее имя файла, измените/оставьте в/в.
Если вы хотите отсортировать что-то еще, добавьте команду сортировки ко второй строке.

+1

Ваш метод будет работать, но он создаст ненужные временные файлы. Кроме того, при использовании del в скриптах BATCH я всегда добавляю переключатель/Y - иначе команда del может быть очень раздражающей ... :) – Paulius 2008-09-09 13:29:36

+0

хороший вызов - я отредактирую. – seanyboy 2008-09-09 13:31:50

4

Один лайнер, используя EXIT трюк:

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

EDIT:

@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