从变量中获取文件名

时间:2013-11-01 05:39:47

标签: batch-file

我对批处理文件编程完全不熟悉,如果这很明显,请原谅我。假设我有一个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获取文件名?

3 个答案:

答案 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()