[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]批处理获取wmic命令结果的格式问题

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "skip=1 tokens=1,3,5 delims=. " %%a in ('wmic datafile where name^="D:\\1.txt" get LastModified') do (set "aaa=%%a")
  3. echo !aaa!
  4. pause
复制代码
显示:
ECHO 处于关闭状态。
请按任意键继续. . .

请教上面哪里出问题了?非常感谢!!!

本帖最后由 lancer 于 2023-4-7 11:13 编辑

将echo,!aaa!移到set后面就可以正常显示了,具体原因我说不出来,但是感觉跟数字精度有关系,不能超过32位精度。出了循环,aaa保存的数字就丢失了。应该是太大了。32位精度的数字最大只能是4294967296,而你的日期太大了20230407103622,不能保存。。。会立刻失效。。
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "skip=1 tokens=1,3,5 delims=. " %%a in ('wmic datafile where name^="D:\\1.txt" get LastModified') do (set "aaa=%%a"&&echo,!aaa!)
  3. pause
复制代码

TOP

其实获取文件的修改时间可以用
dir /tw

TOP

本帖最后由 holley 于 2023-4-7 11:24 编辑

回复 1# maghreb
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "skip=1 tokens=1,3,5 delims=. " %%a in ('wmic datafile where name^="D:\\1.txt" get LastModified') do (
  3. if %%a lss 0 goto end
  4. set aaa=%%a
  5. echo !aaa!
  6. echo 最后修改: !aaa:~0,4! 年 !aaa:~4,2! 月 !aaa:~6,2! 日 !aaa:~8,2! 时 !aaa:~10,2! 分 !aaa:~12,2! 秒
  7. )
  8. :end
  9. pause>nul
复制代码

TOP

这种问题已经有很多了,http://www.bathome.net/thread-65724-1-1.html。wmic get的结果行尾有多余的空格和回车符,末行也有多余的回车符;如果加上/value参数,首尾几个空行及每行行尾都有多余的回车符。有很多方法可以过滤,这是一个:
  1. for /f "skip=1 tokens=1,3,5 delims=. " %%a in ('wmic datafile where name^="D:\\1.txt" get LastModified ^| findstr .') do (set "aaa=%%a")
复制代码
2

评分人数

    • maghreb: 虽然还是没懂,但问题已经解决技术 + 1
    • holley: 多谢分析技术 + 1

TOP

回复 2# lancer


    跟数字精度没关系,set是设字符串变量,不是数字表达式,你之所以没有显示“ECHO 处于关闭状态”,是因为你使用了“echo,”,实际上是多显示了空行。而且你把echo放循环里,让变量的实际内容没有被回车符覆盖。

TOP

这实际上是关于wmic结果的格式问题,建议楼主改一下标题,让问题更具体。

TOP

回复 6# buyiyang


    学习了。。专门去看了你的帖子,不能说全懂,但至少这个问题懂了。。。
关于wmic还是用的太少了,哎。。。

TOP

返回列表