Batch file 在.bat文件中传递文件名变量
我的代码如下Batch file 在.bat文件中传递文件名变量,batch-file,Batch File,我的代码如下 set log_file = Automation_log.log call :main > %log_file% exit /b :main call:main>%log\u file%生成语法错误 您可能想知道为什么我不将日志文件名直接传递到>,, 我这样做是因为我在文件名中输入了日期和时间,它将得到定制 通过跟随注释,下面是我的代码的外观 @echo off For /f "tokens=2-4 delims=/ " %%a in ('date /t') do
set log_file = Automation_log.log
call :main > %log_file%
exit /b
:main
call:main>%log\u file%生成语法错误
您可能想知道为什么我不将日志文件名直接传递到>,,
我这样做是因为我在文件名中输入了日期和时间,它将得到定制
通过跟随注释,下面是我的代码的外观
@echo off
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%a-%%b)
For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set mytime=%%a%%b)
set log_file = Automation_Log__%mydate%_%mytime%.log
call :main > "%log_file%"
exit /b
:main
这也会导致错误,因为系统找不到指定的路径。这是您的脚本,其中包含正确定义的变量,使用非本地/PC相关的方法获取日期和时间。本例只需使用内容
Test
创建文本文件即可:
@Echo关闭
设置“日志文件=”
对于/F“Tokens=1-6Delims=/:”%%A In('RoboCopy/NJH/L“\\\\\”Null)
)如果未定义日志文件,则不设置“日志文件=自动化日志”%%A%%B%%C%%D%%E\%%F”
调用:Main>%log\u文件%
后藤:EOF
:Main
回声测试
退出/B
您没有指明预期的日期和时间格式,因此我使用了
yyyyMMdd\u hhmmss
。如果您希望更改,请重新排列第4行的顺序,其中%A
=yyyy
,%B
=MM
,%C
=dd
,%D
=hh
,%E
%E
MM
和%F
ss
ss尝试设置日志文件,然后是Call:main>“%log\u file%”
。当前,您有一个名为log\u file
的变量,字符串值为Automation\u log.log
。使用您的注释,下面是代码,但在@echo off For/f“tokens=2-4 delims=/”('date/t')do中的%%a(set mydate=%%c-%%a-%%b)For/f“tokens=1-2 delims=/:“%%a in(“%TIME%”)do(set mytime=%a%%b)set“log\u file=Automation\u log\u%mydate%\u%mytime%.log”调用:main>%log\u file%“退出/b:main您没有遵循我给出的建议,除非您这样做,否则脚本将仍然存在问题。此外,使用Date/T
和%TIME%
只能保证在您自己电脑的特定登录下正确无误。我想进一步介绍@Compo的评论。您得到的错误是因为没有定义没有尾随空格的log\u文件
。因此,call:main>%log\u file%
产生错误,因为未定义log\u file
时,命令变为call:main>
,这是无效的。在CMD中,set命令中的=
周围不需要空格。要修复错误,您只需设置日志文件=自动化日志。日志在=
两侧没有空格。非常好,谢谢。很抱歉延迟,我是OOO。我希望在文件名中获得时间秒,因为有可能运行其他进程来生成日志。如果在:Main之前有Exit/B行,会发生什么?我将执行接下来的几个步骤,这些步骤需要将输出记录在此文件中。此外,一旦我的过程结束,我需要阅读同一个日志文件和searc for'Failed:0',然后发送一封电子邮件。@JBJ,我已将我的答案更改为现在在日志文件名中包含秒数。谢谢,收到了,我尝试了类似的方法,因为我现在能够理解更多。我有一个包含如下行的日志文件"测试总数:1。通过:0。失败:1。已跳过:0。“\n如果失败:包含0以外的任何数字,则我需要以电子邮件的形式发送一封邮件,并将日志文件作为附件。