Board logo

标题: [日期时间] 批处理在for下如何截取变量? [打印本页]

作者: 79794133    时间: 2021-9-3 14:48     标题: 批处理在for下如何截取变量?

Set Folder1=e:\1
setlocal enabledelayedexpansion
for /r "%Folder1%" %%i in (*) do (
set riqi=%%~ti 此处能获取各个文件的创建时间
!riqi! 此处不管是!riqi!还是%riqi%都无法显示
%date% 能显示正常当前系统时间
set filedate=!riqi:~0,4!!riqi:~5,2!!riqi:~8,2!   不管是!还是%都不会显示变量值
set file2date=%date:~0,4%%date:~5,2%%date:~8,2% 正常格式化日期
)
pause

说明:
set riqi=%%~ti 执行后显示为文件创建日期 如 set riqi=2021/09/04 13:04
我现在想把这个20210904这个给截取下来,应该如何做?望大神指教
作者: Batcher    时间: 2021-9-3 15:29

回复 1# 79794133
  1. setlocal enabledelayedexpansion
  2. set "Folder1=E:\1"
  3. if not exist "%Folder1%" (
  4.     echo 文件夹不存在
  5.     pause
  6.     goto :eof
  7. )
  8. for /r "%Folder1%" %%i in (*) do (
  9.     set "riqi=%%~ti"
  10.     echo !riqi!
  11.     set "filedate=!riqi:~0,4!!riqi:~5,2!!riqi:~8,2!"
  12.     echo !filedate!
  13.     pause
  14. )
  15. pause
复制代码
请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ

请参考Q-01观察一下哪行代码在报错以及详细的报错信息:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ
作者: 79794133    时间: 2021-9-3 15:52

如果截取出来了,运行之后第7行应该会显示数值set filedate=xxxxxxxx,而不是set filedate=!riqi:~0,4!!riqi:~5,2!!riqi:~8,2!
作者: 79794133    时间: 2021-9-3 15:54

回复 2# idwma


    如果截取出来了,运行之后第7行应该会显示set filedate=xxxxxxxx,而现在显示的是set filedate=!riqi:~0,4!!riqi:~5,2!!riqi:~8,2!


你可以试一下
作者: Batcher    时间: 2021-9-3 16:14

回复 5# 79794133


    set命令的回显跟你理解的可能不一样,echo变量的值是正常的就行了。




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