1

我试图使用 powershell 在文件夹中给定类型的所有文件上运行程序。

我首先做了一个测试,看看我是否可以遍历文件夹中的所有文件类型,并写了这个:

$files = ls *.inp
foreach ($file in $files) {echo $file.basename}

哪个输出:

myfile1.inp
myfile2.inp
myfile3.inp

到现在为止还挺好。现在,当我将下一位放在 for 循环中时,它不起作用:

$files = ls *.inp
foreach ($file in $files) {myProgram arg1=$file.basename}

请注意,myProgram 的路径已经是我的路径变量的一部分,所以我不必写 myProgram.exe 的完整路径,我可以只写 myProgram。此外,arg1 = 我要处理的文件。

我想看看发生了什么,所以我在循环中回显了上述命令:

foreach ($file in $files) {echo myProgram arg1=$file.basename}

...输出:

myProgram arg1=myfile.inp.basename

所以由于某种原因,在第二种情况下,basename 方法没有做我想要的。

我将脚本更改为以下内容,效果很好:

foreach ($file in $files) {echo myProgram arg1=$file}

我的问题是,为什么 $file.basename 在两种情况下输出不同的东西?如果我只想在第二种情况下使用基本名称,我该怎么做?

谢谢!

4

1 回答 1

1

powershell 解析器$file在此上下文中(一个字符串参数)将其视为一个完整的表达式。所以它执行$file然后将“.basename”附加到那个。要告诉它将整个字符串作为单个表达式执行,您需要将其包装在$()

foreach ($file in $files) {myProgram arg1=$($file.basename)}
于 2013-09-16T17:48:01.100 回答