我遇到的问题应该不难理解。
我有一个文件夹文件夹,版本号为1.1.0.1,1.1.0.2。我想获取非空的最新已修改文件夹,这意味着它在其中的某处有一个文件(在该文件夹下将始终具有相同的名称和位置),而不仅仅是更多文件夹,并将该文件复制到别处。
现在我有
FOR /F "delims=" %%i IN ('dir /b /ad-h /t:c /od') do (set latest=%%i)
要找到最新的文件夹,但该文件夹不起作用,它会返回一个随机文件。任何帮助将不胜感激。
答案 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
应该为您提供编号最小的非空文件或文件夹。
以下是发生的事情:
du
以确定每个文件/文件夹的大小。du
包含的文件名前面的“./”作为其输出的一部分。-n
是数字排序,这假设数字前面没有前缀。sort
可以处理它,如果有,请查看联机帮助页。)