Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows批处理脚本:对文件夹排序并仅处理第一个文件夹_Windows_Batch File - Fatal编程技术网

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

我有一个文件夹目录,我正在尝试编写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

我不需要在循环中执行此操作(以处理“目录”下的所有文件夹)。我只需要能够选择最短日期的文件夹,并单独处理该文件夹

我很擅长将目录中的文件复制到其他位置的代码,但在选择日期最早的文件夹(没有for循环)时遇到了困难


感谢您的帮助。提前谢谢

您可以使用
/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为我工作,按名称排序文件夹,然后在循环中处理每个文件夹。