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

Powershell System.IO.File当前目录仅使用TXT文件,powershell,Powershell,我有一个文件夹位置 Z:\MyFolder\Hours 在这个文件夹中,我有两个文件,一个PowerShell脚本和一个文本(txt)文件;我将只在这个文件夹中保存这两个文件,但文本文件名每周都会更改。下面是我的PowerShell脚本,它可以正常工作,但我希望它能够获取存储(或打开)它的当前目录,打开目录中唯一的txt文件,然后在其上运行脚本。目前,txt文件的打开和保存是硬编码的,我想在一些文件上使用相同的脚本,这些文件的名称每天都在变化。我感谢任何人的帮助 $r = @{

我有一个文件夹位置

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

请参阅我的答案,了解如何获取脚本正在执行的目录。

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

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

这应该会让你走起来。

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

(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)文件,进行替换并保存文件。

我认为这不是一个可行的解决方案,每个
Monday
将扩展到
Monday
等。在简短的工作日名称后添加
\b
,以限制字数界限。感谢您的评论。我没有经历过这种情况,因为当我的脚本运行时,文件将只包含短名称,并且不会在同一个文件上运行两次。我确实测试了你的理论,尽管结果略有不同,但它确实产生了一个问题。我不确定我是否会遇到这种情况,但为了万无一失,我按照你的建议进行了编辑。再次谢谢你。