如果这是一个新手的错误,我为浪费你的时间而道歉。
作为使用今天的日期创建目录的更大批处理文件的一部分,复制并粘贴要备份的文件,更改权限并删除早于X天的文件,我遇到了问题。这是它发生的地方:
echo var D = new Date() > tmp.js
echo D = (D.getFullYear()*100+D.getMonth()+1)*100+D.getDate() >> tmp.js
echo WScript.Echo( 'set YYYYMMDD='+D ) >> tmp.js
echo @echo off > tmp.bat
cscript //nologo tmp.js >> tmp.bat
call tmp.bat
命令提示符会回显此错误:
Input Error: There is no file extension in "C:\Users\name\Desktop\Error:".
很明显,批处理文件的其余部分会失败,但奇怪的是它可以在网络上的一台机器上运行,但不能在另一台机器上运行。
非常感谢任何帮助。
编辑:该代码还有一行返回错误,我的错误。 我打电话给tmp.bat之后:
mkdir "\\network\file\%YYYYMMDD%"
答案 0 :(得分:0)
此代码不会生成指示的错误
但是,如果批处理文件的路径包含空格,并且代码类似于
cscript //nologo %~dp0\tmp.js
您将获得指示的错误,因为cscript的参数被错误地解析,因为js文件路径中的空格。如果是这种情况(或类似的情况),文件名中的引号应解决它
cscript //nologo "%~dp0\tmp.js"
此外,不需要临时批处理文件。可以使用for
命令
set "tmpJS=%~dp0\tmp.js"
>"%tmpJS%" echo with(new Date()){WScript.StdOut.WriteLine(getFullYear()*10000+(getMonth()+1)*100+getDate())};
for /f %%D in ('cscript //nologo //B "%tmpJS%"') do set "YYYYMMDD=%%D"
答案 1 :(得分:0)
哇 - 这是一个非常复杂的方法来获取变量中的当前日期。
这不是你问题的直接答案,但我想我可以让你的生活更轻松: - )
确实不需要临时批处理文件。 FOR / F可以直接处理临时JS脚本的输出。
但是我有一个更简单的解决方案 - GetTimeStamp.bat是一个混合JScript /批处理实用程序,几乎可以在Windows机器上进行任何日期和时间计算。
该实用程序是纯脚本,可以在XP前面的任何现代Windows机器上运行 - 不需要第三方可执行文件。
假设getTimestamp.bat位于当前目录中,或者更好,位于PATH中的某个位置,则以下简单调用将定义包含YYYYMMDD格式的今天日期的YYYYMMDD
变量:
call getTimeStamp -f {yyyy}{mm}{dd} -r YYYYMMDD
有许多选项可用于指定基准日期和时间,许多选项可用于向日期和时间添加正偏移或负偏移,许多用于格式化结果的选项以及用于在变量中捕获结果的选项。输入和输出都可以直接表示为本地时间,UTC或您选择的任何时区。完整的文档嵌入在脚本中。
答案 2 :(得分:0)
想出来:
在cscript
上运行tmp.js
导致错误开始进入tmp.bat
call tmp.bat
内部的错误消息, tmp.bat
然后返回了奇怪的输入错误。
tmp.bat
看起来像这样
Cscript Error: Can't find script engine "JScript" for script "C:\Users\name\Desktop\tmp.js".
这就是调用tmp.bat返回此错误消息的原因:
Input Error: There is no file extension in "C:\Users\name\Desktop\error:".
问题最终出现在jscript.dll上。它需要(重新)注册。
regsvr32 %systemroot%\system32\jscript.dll
^修正了我的问题。谢谢大家的帮助。