Windows批处理脚本:对文件夹排序并仅处理第一个文件夹
我有一个文件夹目录,我正在尝试编写windows批处理脚本,按名称对文件夹进行排序,然后将第一个文件夹中的文件复制到其他位置 目录Windows批处理脚本:对文件夹排序并仅处理第一个文件夹,windows,batch-file,Windows,Batch File,我有一个文件夹目录,我正在尝试编写windows批处理脚本,按名称对文件夹进行排序,然后将第一个文件夹中的文件复制到其他位置 目录 2020-09-02 2020-09-01 此处的“2020-09-02”和“2020-09-01”是文件夹(或文件夹“目录”下的子文件夹)。每个文件夹(2020-09-02和2020-09-01)中都有一组文件 我需要选择文件夹2020-09-01(因为这是最旧的文件夹),将文件夹2020-09-01中的文件复制到其他位置,然后删除文件夹2020-09-01
- 2020-09-02
- 2020-09-01
感谢您的帮助。提前谢谢 您可以使用
/o
开关从dir
使用最旧的项目,/ad
开关仅显示目录,/b
开关查看没有卷标和目录信息的目录,仅显示文件
rem Ensure that 'oldest' variable isn't being used before.
set oldest=
for /f "delims=" %%A in ('dir /od /ad /b') do if not defined oldest set "oldest=%%A"
rem Oldest folder is stored into %oldest%
我不明白您为什么不想使用for循环。for
语句可能是批处理中最强大的语句,请查看和以获取
解释和示例。为什么不使用for
命令获取最旧的目录?我唯一能想到的另一种方法是按字母顺序将目录列表输出到文件中,然后使用set/p
命令读取文件的第一行。谢谢回应。我只需要处理一个文件夹(最旧的)。也许,我可以在第一次迭代后中断for循环,但我正在寻找更好的方法。是的,最有效的方法是在读取第一个文件夹名称后中断循环,但如果您将最新文件夹名称排序为最旧文件夹名称,只要让循环完成它的整个迭代,最老的将被分配到最后。我对你的答案投了反对票,因为它提供了令人困惑的信息。您编写它的方式表明,DIR
命令中的/O
选项表示“最早的”,但显然不是。/O
选项表示“订单”。在查看文件对象日期戳时,您可以使用D
排序顺序选择“最早的第一个”,或-D
排序顺序选择“最早的最后一个”。在上面的例子中,您没有使用对象日期戳,日期是目录名中的字符串,幸运的是,这些字符串的格式可以按字母顺序排序,即DIR/B/a:D/O:N
,或者DIR/B/a:D/O:-N
。DIR/B/a:D/O:N为我工作,按名称排序文件夹,然后在循环中处理每个文件夹。