最近我发布了一个问题,关于您使用批处理文件打开的文件的变量是什么,该文件是%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扩展名。谁能帮助我,告诉我这是什么问题?
答案 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