我的要求是根据上次修改日期在文件夹中查找最新文件名。 我需要单行命令。我在命令下执行。
@echo off && (for /f "tokens=*" %a in ('dir /b/a-d/od/t:w *.*') do set newestfile=%a) && @echo on && echo %newestfile%
这给了我正确的结果,但唯一的问题是,如果我修改另一个文件...那么它也显示我以前的文件名。我已经读过,本地变量没有被重置,这就是显示旧/上一个文件的原因。
我在批处理脚本中编写了逻辑。这是按照预期的方式工作但在命令行中给了我奇怪的结果。
答案 0 :(得分:2)
这是一个更简单的解决方案,可以避免使用任何环境变量。
只需反转排序顺序,首先列出最新文件,然后终止循环。这可以通过启动运行处理DIR命令的FOR / F循环的新cmd.exe进程来完成。循环回显第一个列出的文件,然后退出该过程。我相信这是最简单和最有效的方法。
cmd /d /c for /f "eol=: delims=" %a in ('dir /b/a-d/o-d/t:w') do @echo %a^&exit
可以使用没有延迟扩展的变量 - 如果DEFINED不需要延迟扩展。
set go=1&for /f "eol=: delims=" %a in ('dir /b/a-d/o-d/t:w') do @if defined go echo %a&set "go="
您可以使用FINDSTR获取第一个列出的文件。如果您不关心1:
前缀,可以使用:
dir /b/a-d/o-d/t:w | findstr /n "^" | findstr "^1:"
如果要删除前缀,只需使用FOR / F循环进行处理:
for /f "delims=: tokens=1*" %a in ('dir /b/a-d/o-d/t:w ^| findstr /n "^" ^| findstr "^1:"') do @echo %b
答案 1 :(得分:0)
为此你需要delayed expansion。由于这是从命令行调用的,因此您需要一个带有cmd /v:on /c "(for /f "tokens=*" %a in ('dir /b/a-d/od/t:w *.*') do @set newestfile=%a) && @echo !newestfile!"
参数的新cmd实例:
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA["C:\\The\\Path\\To\\Subreport\\"]]></defaultValueExpression>
</parameter>