CMD:失败,%1

时间:2010-01-02 15:43:49

标签: windows batch-file cmd

最近我发布了一个问题,关于您使用批处理文件打开的文件的变量是什么,该文件是%1。

我使用了这个,让我的批处理文件将%1复制到特定位置。 在这样做,调试和大量的时间,它实际上工作,经过调试更多,添加一些功能,以及一些更多的调试,它停止工作。这是一个片段,它似乎出错了(我尝试@echo on来获取我的信息。)

if not "%1:~-8%"==".package" (
set error=yes
set errmes1=File %1 does not have a .package extension.
goto :errpkg
)
copy "%1" "C:\path_to\folder"

:errpkg
cls
echo %errmes1%
...

%1=C:\path\to\it\file_something.package

我猜这是错误的一点。因为它最终会收到此消息。它应该做什么,是if not检查文件是否有.package扩展名。然后,set error=yes,只是说出它的作用,set errmes1设置错误信息。然后goto只是转到批处理文件中的某个位置,它解释了问题所在。 (使用%errmes1%

所以,就是这样。这是出错的地方。我100%确定它有.package扩展名。谁能帮助我,告诉我这是什么问题?

3 个答案:

答案 0 :(得分:2)

我真的很想知道你是怎么做到的。 substring语法仅适用于环境变量(以及%cd%等伪变量)。这意味着你可以做到

%foo:~-8%

但不是

%1:~-8%

如果您拥有名为%1%的环境变量,这甚至都不会起作用。

无论如何,检查参数扩展的通常习惯是

%~x1

那么为什么复杂的东西超过必要的呢?

答案 1 :(得分:0)

尝试使用%~x1来提取扩展名?你的语法对我不起作用。

另外,无法在cmd.exe中的条件get screwy中设置变量吗?

答案 2 :(得分:0)

我同意之前关于使用%~x1检查扩展程序的答案。

修改:请尝试以下操作:

if not "%~x1%"==".package" (

此外,您可能在goto之后错过了copy语句,以跳过显示错误消息的块?

...
copy "%1" "C:\path_to\folder"
goto :skipErrpkg

:errpkg
cls
echo %errmes1%
...

:skipErrpkg