我有一个文件夹位置
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
再次感谢您的帮助!
答案 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)文件,进行替换并保存文件。