我有一个将每10分钟执行一次的bat文件。在我看到的cmd"系统找不到指定的路径"。
任何想法为什么?
以下是代码:
@ECHO OFF
REM SET DATA, TIME AND PATH
SET DPATH="C:\keepalive\logs\"
SET DATES=%DATE:~7,2%_%DATE:~4,2%_%DATE:~10,4%
SET TIMES=%TIME:~0,2%_%TIME:~3,2%_%TIME:~6,2%
SET DAT=%DPATH%%DATES%.log
REM PRINTING USERNAME
ECHO USER:%USERNAME% 1>>%DAT% 2>&1
ECHO %DATES%%TIMES% 1>>%DAT% 2>&1
ECHO ACCESS WEBSITE 1>>%DAT% 2>&1
START iexplore http://example.com/sitecore/service/keepalive.aspx
ECHO WAITING FOR WEBSITE 1>>%DAT% 2>&1
PING 1.1.1.1 -n 1 -w 20000 >NUL
ECHO CLOSING WEBSITE 1>>%DAT% 2>&1
taskkill /F /T /IM iexplore.exe
EXIT
答案 0 :(得分:0)
通过更改以下代码行
来解决此问题SET DATES=%date:~6,4%%date:~3,2%%date:~0,2%
要:
available=$(echo $(free -m)|awk '{print $10}')
答案 1 :(得分:0)
我猜你的本地日期格式可能与我的不同,你没有得到你想要的操纵日期变量。
在测试批处理文件中运行:
@echo off
SET DATES=%DATE:~7,2%_%DATE:~4,2%_%DATE:~10,4%
echo %DATES%
pause
通过从DAT中删除%DATES%字符串进行测试。这仍然会产生相同的错误吗? SET DAT="%DPATH%\TestName.log"
我建议您更改双引号的位置。目前你在SET DPATH="C:\keepalive\logs\"
左右拥有它们。如果您生成带有名称的复杂路径(如其中的空格),则执行以下操作会更安全:
SET DPATH=C:\keepalive\logs
SET DATES=%DATE:~7,2%_%DATE:~4,2%_%DATE:~10,4%
SET TIMES=%TIME:~0,2%_%TIME:~3,2%_%TIME:~6,2%
SET DAT="%DPATH%\%DATES%.log"
同时将“\”移动到DAT字符串中而不是将其包含在DPATH字符串中,这样可以更容易地看到并知道它是正确的。
答案 2 :(得分:0)
您的代码中存在以下几个问题:
\
值中移除DPATH
也非常有意义; set
语法:set "VAR=Value"
,因此引号不会成为变量值的一部分;所以有一个地方可以有效地放置引号:读取(扩展)变量值,如"%VAR%"
;这在串联"%VAR%\item"
的情况下特别有用,因此整个表达式都包含在""
中,并且字符串值中没有令人不安的引号; %DATE%
和%TIME%
值,以反映相同的时间点;使用两个完全在午夜运行的独立命令行,虽然极不可能,但可能导致%DATE%
返回前一天但%TIME%
已在第二天返回; echo string 1>> "file.ext" 2>&1
反转为1>> "file.ext" echo string
,以避免将任何前导空格输出到文件file.ext
;对于echo
,您根本不需要2>&1
部分,因为它不会向 STDERR 频道(2
)输出任何内容,而只会输出< em> STDOUT 频道(1
); ping
等待一段时间,您应该使用始终存在的IP并使用多个回应请求之间的1秒暂停间隔,因为猜测不存在的IP可能会失败,以防万一将来存在一些;因此,等待3
秒,您需要4
个回应请求才能有3个暂停间隔:ping 127.0.0.1 -n 4
; start
命令添加一个窗口标题,这样当命令括在引号中时你永远不会遇到问题,因为start
认为第一个被引用的项目是title:{{ 1}}; start "" command
您应该说明exit
,因为exit /B
退出批处理脚本,exit /B
终止包含exit
实例;通过任务调度程序执行时,它不会改变任何内容,但是在调试时,cmd
始终关闭时可能会非常烦人; 这是固定代码:
cmd