批处理脚本创建含日期时间(带AM/PM)文件夹异常问题咨询
解决批处理创建带AM/PM标识的日期时间文件夹问题
我来帮你拆解这个问题的根源,再给你可行的解决方案:
问题出在哪?
你遇到的核心问题是空格引发的命令参数拆分,具体细节是这样的:
- 系统的
time /t命令输出格式是类似11:30 AM这种,自带空格和上午/下午标识 - 你原来处理时间的for循环只抓了前两个部分(小时和分钟):
这里的分隔符只设了For /f "tokens=1-2 delims=/:" %%a in ('time /t') do (set mytime=%%a-%%b)/和:,空格不算分隔符,所以AM(包括前面的空格)根本没被纳入mytime变量里,会被当成独立内容留在命令行里 - 最后执行
mkdir %mydir%的时候,系统会把"2020-5-19-11-30"和AM当成两个独立的参数,自然就创建了两个文件夹
怎么搞定?
我们需要调整时间捕获的逻辑,把AM/PM也包含进来,同时确保创建文件夹时正确处理带空格的名称:
修改后的完整批处理代码
@echo off :: 处理日期,格式转为YYYY-MM-DD For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%a-%%b) :: 处理时间,同时捕获小时、分钟和AM/PM,格式转为HH-MM AM/PM For /f "tokens=1-3 delims=: " %%a in ('time /t') do (set mytime=%%a-%%b %%c) :: 组合成完整的文件夹名称 set mydir=%mydate%-%mytime% :: 创建文件夹,用引号包裹路径,避免空格把名称拆成多个参数 mkdir "%mydir%"
关键调整说明
- 处理时间的for循环把分隔符改成了
:和空格(delims=:),这样就能把11:30 AM拆成三个部分:11、30、AM,全部捕获到mytime里 - 最后执行
mkdir时,用双引号把%mydir%整个包裹起来,确保带空格的文件夹名被当作一个整体参数,不会被系统拆分
这样运行批处理后,就能生成你想要的单个带日期时间和AM/PM标识的文件夹啦。
内容的提问来源于stack exchange,提问作者HyperionMike
相关产品推荐
相关产品推荐

