我对批处理文件编程完全不熟悉,如果这很明显,请原谅我。假设我有一个c:\some\path\someFile.extension
字符串存储在 TheFileToPass 中,我正在调用同一个批处理文件中的另一个exe,这样我只应该传递从 TheFileToPass (即 someFile )。
我正在尝试做的伪代码:
string TheFileToPass =“c:\ some \ path \ someFile.extension”
调用external_tool.exe TheFileToPass.GetFileNameWithoutExtension()
通过在线搜索,我发现%~nI 可以解决问题,但如何在 TheFileToPass 变量上使用它?我尝试过以下但没有任何作用:
echo %%〜TheFileToPass
echo %% ~n%TheFileToPass%
修改
好的,我会尝试更具描述性。我在批处理文件中定义了几个“局部变量”:
set someFlag1=
set someFlag2=
set someFile=
然后我解析命令行参数并将它们放在声明的变量之上。批处理文件可以具有可变数量的命令行参数,因此值的位置可以根据某些预定义规则而变化。简而言之,我们无法确定%1,%2,%3(等)哪个将始终具有文件路径。无论如何,基于预定义的规则,我们解析命令行参数(使用SHIFT循环技术)并将这些信息保存在我们的变量中:someFlag1,someFlag2和someFile。
现在,someFile包含文件的完整路径,例如:“c:\ some \ path \ file.txt”。我们希望调用一个外部exe并从someFile变量的内容中传递文件名(在本例中为“file”)。
那么我们对“someFile”变量进行什么操作呢?我们只从fullpath获取文件名?
答案 0 :(得分:1)
您说您正在使用shift来迭代批处理文件的参数以获取文件名。所以在某些时刻,你会有一些东西
set "someFile=%~1"
然后,您需要添加的是提取文件名以便以后使用
set "onlyFileName=%~n1"
答案 1 :(得分:0)
这取决于您如何将文件传递到批处理文件。
您要么传递命令行并使用%~dpn1(您需要路径),要么硬编码传递给bat中的函数并使用相同的%~dpn1。
类型
call /?
set /?
答案 2 :(得分:0)
for %f in ("%TheFileToPass %") do call external_tool.exe %~nf.GetFileNameWithoutExtension()