Пакетный файл, который запускает команду для первого результата запроса? - PullRequest
1 голос
/ 10 июня 2019

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

Итак, у меня есть

aaa-test-01.txt
b-test-a-02.txt
cc-test-03.txt //newset

Запрос:

dir *test*.txt /o-d 

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

А теперь я хочу открыть первый результат с помощью блокнота.

Вопрос

Как я могу создать командный файл, чтобы я мог запустить его как:

run.bat *test*.txt

Пакетный файл должен иметь что-то вроде:

notepad %the file%

В принципе, я хочу открыть блокнот с последним последним файлом.

Ответы [ 2 ]

2 голосов
/ 10 июня 2019

Я бы посоветовал вам запустить команду в цикле For /F, поменять местами порядок даты, чтобы она сначала возвращалась и действовала в самой новой версии перед выходом из цикла, (таким образом предотвращая воздействие на следующий файл) .

@For /F "Delims=" %%A In ('Dir /B /A:-D /O:-D /T:C "*-test-*.txt" 2^>Nul') Do @Start "" Notepad "%%A" & Exit /B

В приведенном выше примере используется самая последняя дата C, в отличие от A обработанного или W ritten (по умолчанию) , введите dir /? в команде , чтобы увидеть информацию об использовании, доступную для команды Dir.

1 голос
/ 10 июня 2019

Переменная может быть установлена ​​путем перенаправления ввода из файла.

=== run.bat

@ECHO OFF
SET "TEMPFILE=%TEMP%\firstfile.tmp"
FOR /F "delims=" %%f IN ('DIR /B /A:-D /O:-D "%~1"') DO (ECHO>"%TEMPFILE%" %%~f")
SET /P "FIRSTFILE=" <"%TEMPFILE%"
notepad "%FIRSTFILE%"
IF EXIST "%TEMPFILE%" (DEL "%TEMPFILE%")

В командной строке просто запустите скрипт .bat file.

CALL run.bat *test*.txt

Если вы хотите перейти в PowerShell и иметь текущую версию 5 или выше, это можно использовать.

Get-ChildItem -File '*test*.txt' |
    Sort-Object -Property LastWriteTime |
    Select-Object -First 1 |
    ForEach-Object { & notepad $_.Name }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...