输入错误:没有文件扩展名

时间:2014-01-07 02:09:15

标签: batch-file

如果这是一个新手的错误,我为浪费你的时间而道歉。

作为使用今天的日期创建目录的更大批处理文件的一部分,复制并粘贴要备份的文件,更改权限并删除早于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%"

3 个答案:

答案 0 :(得分:0)

此代码不会生成指示的错误

但是,如果批处理文件的路径包含空格,并且代码类似于

cscript //nologo %~dp0\tmp.js

您将获得指示的错误,因为cscript的参数被错误地解析,因为js文件路径中的空格。如果是这种情况(或类似的情况),文件名中的引号应解决它

cscript //nologo "%~dp0\tmp.js"

此外,不需要临时批处理文件。可以使用for命令

直接读取cscript的输出
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

^修正了我的问题。谢谢大家的帮助。