Board logo

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

作者: maghreb    时间: 2023-4-7 09:18     标题: [已解决]批处理获取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 10:53

本帖最后由 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
复制代码

作者: lancer    时间: 2023-4-7 11:07

其实获取文件的修改时间可以用
dir /tw
作者: holley    时间: 2023-4-7 11:12

本帖最后由 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
复制代码

作者: buyiyang    时间: 2023-4-7 11:28

这种问题已经有很多了,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")
复制代码

作者: buyiyang    时间: 2023-4-7 11:35

回复 2# lancer


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

这实际上是关于wmic结果的格式问题,建议楼主改一下标题,让问题更具体。
作者: lancer    时间: 2023-4-7 16:50

回复 6# buyiyang


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




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2