Windows 对第一个查询结果运行命令的批处理文件?
我想编写一个批处理文件,通过特定查询调用命令 所以我有Windows 对第一个查询结果运行命令的批处理文件?,windows,batch-file,cmd,command-prompt,Windows,Batch File,Cmd,Command Prompt,我想编写一个批处理文件,通过特定查询调用命令 所以我有 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% 基本上,我想用最后一个最新文件打开记事本。可
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%
基本上,我想用最后一个最新文件打开记事本。可以通过重定向文件输入来设置变量 ==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%")
如果您想进入PowerShell并拥有当前版本5或更高版本,可以使用此选项
Get-ChildItem -File '*test*.txt' |
Sort-Object -Property LastWriteTime |
Select-Object -First 1 |
ForEach-Object { & notepad $_.Name }
我建议您在
For/F
循环中运行该命令,反转日期顺序,以便在退出循环之前返回最新的第一个文件并对其执行操作(从而防止对下一个文件执行操作)
@For/F“Delims=“%%A In('Dir/B/A:-D/O:-D/T:C”*-test-*.txt“2^>Nul”)执行@Start”“Notepad”%%A”并退出/B
上面的示例使用最近创建的
C
日期,而不是A
accessed或W
rited(默认),在处输入dir/?
以查看dir
命令的可用用法信息。您无需键入SET命令。它已在.bat文件脚本中。您所需要做的就是从命令行运行run.bat
。@Compo为什么要执行OD
而不是O-d
?就您的示例而言,它运行在最旧的文件上,而不是最新的文件上……?请将您的评论作为答案发布。您能否详细说明2^>Nul
?我知道
创建一个文件我正在重定向目录中的任何STDERR输出,因为如果没有匹配的文本文件,返回的错误消息将传递到Do
。如果改为将其发送到NUL设备,则不会传递任何信息,并且在该场景中循环不会运行Do
。
Get-ChildItem -File '*test*.txt' |
Sort-Object -Property LastWriteTime |
Select-Object -First 1 |
ForEach-Object { & notepad $_.Name }