本帖最后由 aloha20200628 于 2024-9-11 11:15 编辑
进一步验证》系统日期的格式设置确实有很多种,其设置结果基本与资源管理器的日期显示格式一致,但与%date%, %%~tF和dir列表的日期取值格式不一定相同,无论系统日期格式如何调整,后三者除了分隔符与其保持一致之外,日期值净长度总是在8位(如24-01-31)或10位(如2024-01-31)取值,而资源管理器的日期显示格式可在6-10位之间变化,因此%date%的更稳妥取值方法是用 for /f "tokens=1 delims= " %%a in ("%date%") do set "td=%%a"
以下代码是将15楼代码重写成不调用findstr筛选当日数据的版本,直接用dir/b/tw/o-d排序,令当日数据置顶,从而能对其首先处理并及时结束退出,也免去了采用findstr须检测时间字段个数等关联处理问题...
- @echo off &setlocal
- for /f "tokens=1 delims= " %%a in ("%date%") do set "td=%%a"
- if "%td:~8,1%"=="" (set "e=tt:~0,8") else set "e=tt:~0,10"
- cd /d "d:\目标文件夹" &set "dt=d:\目的地文件夹\%td:/=-%"
- md "%dt%" 2>nul
- for /f "delims=" %%F in ('dir /b/tw/o-d') do if "%%~fF" neq "%~f0" (
- setlocal enabledelayedexpansion &set "tt=%%~tF" &set "tt=!%e%!"
- if "%td%"=="!tt!" (endlocal & move /y "%%F" "%dt%\") else endlocal&pause&exit/b
- )
- endlocal&pause&exit/b
复制代码
|