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
,以限制字数界限。感谢您的评论。我没有经历过这种情况,因为当我的脚本运行时,文件将只包含短名称,并且不会在同一个文件上运行两次。我确实测试了你的理论,尽管结果略有不同,但它确实产生了一个问题。我不确定我是否会遇到这种情况,但为了万无一失,我按照你的建议进行了编辑。再次谢谢你。