【问题标题】:Powershell - Select a specific part of FilenamePowershell - 选择文件名的特定部分
【发布时间】:2021-10-09 00:50:12
【问题描述】:

我需要在目录中的一些 .txt 文件上运行可执行文件。可执行文件只需要文件名的一部分。 例如,如果FileName= "Hello_World.txt",则可执行文件仅在FileName= "Hello" 时有效。

到目前为止,我有代码可以在每个文件中循环执行可执行文件,但问题是它使用了文件的完整名称。

h $magick = 'path\program.exe'
$path = 'path'
foreach ($file in Get-ChildItem -Path $path -File -Filter "*.txt")
{
    & $magick "$($file.FullName)" -negate
"$path\test_$($file.Name)"

关于如何仅选择名称的第一部分的任何想法? 实际文件名为:

J=[0.0, 0.0, 0.0]_spins_00.txt
J=[0.0, 0.0, 0.0]_spins_01.txt

要使用的部分是:J=[0.0, 0.0, 0.0]

关于如何仅选择名称的第一部分的任何想法?计算字符串可以工作(在本例中是前 17 个字符串)。

【问题讨论】:

  • 您要查找的文件的分隔符始终为_,或者文件也可以有其他分隔符(如- 等)?另外请注意,$file.FullName 是文件的绝对路径而不是文件名。
  • 一方面,如果你的文件名有方括号,你应该在 Get-ChildItem 上使用-LiteralPath。您可以像这样拆分文件名:($file,BaseName -split '_')[0] 以获取下划线左侧的部分。

标签: string powershell


【解决方案1】:

受到 Theo 评论的启发,并考虑到阅读的微妙之处,我设法做到了。我发布代码以防有一天有人碰巧在我的鞋子里!

$magick = 'pathtoprogram'

$path = 'pathtofolder'
foreach ($file in Get-ChildItem -LiteralPath $path -File -Filter "*.txt") {
    & $magick "$(($file.BaseName -split '_')[0])" -negate "$path\test_$($file.Name)"
    "$(($file.BaseName -split '_')[0])"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-29
    • 2021-09-19
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多