System.IO.File当前目录仅使用TXT文件

时间:2018-12-12 18:51:46

标签: powershell

我有一个文件夹位置

Z:\MyFolder\Hours

在这个文件夹中,我有两个文件,一个PowerShell脚本和一个文本(txt)文件。我只会在此文件夹中拥有这两个文件,但文本文件名每周都会更改。我的PowerShell脚本在下面并且可以工作,但是我希望它执行以下操作以获取存储(或从中打开)的当前目录,打开目录中唯一的txt文件,然后在其上运行脚本。当前,txt文件的打开和保存是硬编码的,我想对一些名称每天更改的文件使用相同的脚本。我感谢任何人的帮助!

    $r = @{
    "Mon" = "Monday";
    "Tue" = "Tuesday";
    "Wed" = "Wednesday";
    "Thu" = "Thursday";
    "Fri" = "Friday";
    "Sat" = "Saturday";
    "Sun" = "Sunday"
}


$regexes = $r.keys | foreach {[System.Text.RegularExpressions.Regex]::Escape($_)}
$regex = [regex]($regexes -join '|')

$callback = { $r[$args[0].Value] }

$file = [System.IO.File]::ReadAllText("Z:\MyFolder\Hours\file.txt")
$file = $regex.Replace($file, $callback)
Set-Content -Path Z:\MyFolder\Hours\file.txt -Value $file

再次感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

有关如何获取执行脚本的目录的信息,请参见我的答案。 How can I customize powershell when running inside of the VSCode integrated terminal?

要获取目录中唯一(或第一个)txt文件,请执行以下操作:

$file = Get-ChildItem -Path 'Z:\MyFolder\Hours' -Filter *.txt | Select -First 1 | Select -ExpandProperty FullName

这应该可以帮助您。

答案 1 :(得分:0)

我用以下所示的解决方案解决了我的问题:

(Get-Content *.txt) | Foreach-Object {
    $_ -replace 'Mon\b', 'Monday' `
       -replace 'Tue\b', 'Tuesday' `
       -replace 'Wed\b', 'Wednesday' `
       -replace 'Thu\b', 'Thursday' `
       -replace 'Fri\b', 'Friday' `
       -replace 'Sat\b', 'Saturday' `
       -replace 'Sun\b', 'Sunday'
    } | Set-Content *.txt

这允许PowerShell脚本在当前目录中打开,打开该目录中的唯一文本(txt)文件,进行替换并保存文件。