通过 FOR 从 BATCH 文件按日期排序
Posted
技术标签:
【中文标题】通过 FOR 从 BATCH 文件按日期排序【英文标题】:Sort Datewise through FOR from BATCH file 【发布时间】:2018-04-11 08:01:47 【问题描述】:要求是我有 1 个文件夹,在那个文件夹中有很多 txt 文件,每天有 100 多个文件登陆和处理,现在我想监控有多少文件存在于当我为今天的日期运行 bat 文件时的文件夹。
以下是我一直在使用的脚本,但它似乎可以正常工作,但会获取所有文档而不是今天的文档
@echo 关闭 setlocal enabledelayedexpansion 设置 c1=0 对于 /f "tokens=*" %%x in ('dir /s /a /b "D:\Flow\Flow1\Flow2\Flow3\KEN*.txt" 2^>nul') 设置 /a c1+= 1 回声。肯,!c5!【问题讨论】:
试试dir /s /a "D:\Flow\Flow1\Flow2\Flow3\*.txt" 2>NUL | find /C "%date%"
给我错误,不能正常工作
请edit您的问题并添加minimal reproducible example,而不是无用的“给我错误”、“无法正常工作”或“ 根本不起作用”的发音。寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述(和错误代码/消息)的问题对其他读者没有用处。
@RishabhBhargav,您完全没有回答由于您对我的回答的开场评论而提出的问题。在您的问题中,请尝试解释 I don't think i can create a robocopy in the Production, this is working in UAT but not an option for me
应该是什么意思? Production
和 UAT
是什么?是什么阻止你使用RoboCopy
命令?
【参考方案1】:
这是你的意思吗?
从命令提示符:
(For /F %A In ('Dir/S/W/A-D-S-L "D:\Flow\Flow1\Flow2\Flow3\NGR*.txt" 2^>Nul') Do @Call Set "fC=%dC%"&Set "dC=%A")&Call Echo(%fC%
来自批处理文件:
@Echo Off
SetLocal EnableDelayedExpansion
Set "dC="
For /F %%A In ('Dir/S/W/A-D-S-L "D:\Flow\Flow1\Flow2\Flow3\NGR*.txt" 2^>Nul'
) Do Set "fC=!dC!"&Set "dC=%%A"
Echo %fC%
Pause
您也可以选择在5
上添加%DATE% @ %TIME%
。
【讨论】:
我不认为我可以在生产中创建一个 robocopy,这在 UAT 中工作但对我来说不是一个选项 如果你可以给我任何其他选择 如果您有与您的问题相关的重要信息,我建议您edit您的问题包含它! 在重新阅读您的问题并看到完全不同的任务后,我重新创建了上面的代码。现在这是一个更接近的解决方案吗? 我已经更改了我的问题并清除了我的查询,希望这可以帮助您理解并帮助我解决查询【参考方案2】:查找“今天创建”文件的便捷命令是forfiles
命令(不经常使用,可能是因为其反直觉的语法和一些奇怪的地方)。通过管道将其发送到 find /c
以获取计数,在其周围放置一个 for /f
即可完成:
set "days=0"
REM 0 for "created zero days ago" = "created today"
set count=0
REM for /f %%x in ('forfiles /D %days% /P "D:\Flow\Flow1\Flow2\Flow" /m "KEN*.txt" ^|find /i /c ".txt"') do set count=%%x
echo KEN,%count%
将days
设置为3
以获取超过三天(今天和前两天)的文件 - 可能在星期一有用。
(“零天”的意思是“今天”(不是过去的 24 小时,而是从 00:00 开始)——这只是其中一个奇怪的地方)
【讨论】:
以上是关于通过 FOR 从 BATCH 文件按日期排序的主要内容,如果未能解决你的问题,请参考以下文章