系统找不到指定的补丁

时间:2016-01-04 05:16:23

标签: batch-file windows-server-2012

我有一个将每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

enter image description here enter image description here

3 个答案:

答案 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)

您的代码中存在以下几个问题:

  • RLH已经指出了their answer中由于语言环境相关的日期/时间格式导致的潜在问题;从\值中移除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