批处理脚本:复制非空目录中的最新文件夹

时间:2015-02-04 18:27:39

标签: batch-file

我遇到的问题应该不难理解。

我有一个文件夹文件夹,版本号为1.1.0.1,1.1.0.2。我想获取非空的最新已修改文件夹,这意味着它在其中的某处有一个文件(在该文件夹下将始终具有相同的名称和位置),而不仅仅是更多文件夹,并将该文件复制到别处。

现在我有

FOR /F "delims=" %%i IN ('dir /b /ad-h /t:c /od') do (set latest=%%i)

要找到最新的文件夹,但该文件夹不起作用,它会返回一个随机文件。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

我建议

set "latest="
FOR /F "delims=" %%i IN ('dir /b /ad-h /o-d') do if not defined latest if exist ".\%%i\x64\abc.exe" set "latest=%%i\x64\abc.exe"

应该工作,以反向日期顺序查找文件.\x64\abc.exe的每个目录,并在设置变量latest后停止该过程。

答案 1 :(得分:0)

  

对于这些人,我误解了标题并认为这是 bash 脚本而不是批量脚本。我正在抛弃这个错误的机会来获得正确的答案。

假设你的目录看起来像这样:

1.1/
1.2/some_file
2.4/some_other_file

然后这个命令:

 find . -maxdepth 1 -not -name '.' -print0 |\
   xargs -0 -r -n1 -P0 du -s |\
   egrep -v '^0\s+' |\
   cut -f2 |\
   cut -d'/' -f2- |\
   sort -n |\
   head -n1

应该为您提供编号最小的非空文件或文件夹。

以下是发生的事情:

  1. 查找当前目录中未命名为“。”的所有文件,将其作为以空值分隔的列表发出。
  2. 在单独的进程中获取每个文件并运行du以确定每个文件/文件夹的大小。
  3. 过滤掉任何零大小。
  4. 删除尺寸(不再需要)。
  5. 删除du包含的文件名前面的“./”作为其输出的一部分。
  6. 按名称排序文件(-n是数字排序,这假设数字前面没有前缀。sort可以处理它,如果有,请查看联机帮助页。)
  7. 丢弃除第一行以外的所有内容。