我想将 .docx 与 OpenOffice 关联
$extension = ".docx"
$executable = "$MyPrograms\LibreOffice\program\swriter.exe"
$fileType = "docxfile"
if (Test-Path $executable) {
$elevated = @"
cmd /c "assoc $extension=$fileType"
cmd /c 'ftype $fileType="$executable" "%1" "%*"'
New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT
Set-ItemProperty -Path "HKCR:\$fileType" -Name "(Default)" -Value "$fileType file" -ErrorAction Stop
"@
Start-Process powershell -WindowStyle Hidden -Verb runAs -ArgumentList "-Command", $elevated
Write-Host "`'$extension`' has been associated with `'$executable`'."
} else {
Write-Host "`'$executable`' does not exist, so no association for `'$extension`' has been created."
这有一些问题:
- 首先,它不能处理带有空格的文件,因此“This File.docx”会显示两个错误对话框“'This' was not found”,然后是“'File.docx' was not found”,所以ftype语法需要正确处理给出
swriter.exe
完整的文件名,我该怎么做? - 其次,即使我使用不带空格的名称“MyFile.docx”,所发生的只是控制台打开显示帮助输出,
swriter.exe
并且它不会打开应用程序,因此不知何故仅将文件传递到swriter.exe
不足以获取要打开的程序。我该如何解决这个问题?
如果安装了libreoffice,则应该已经在下面定义了progid 。
LibreOffice.Docx
HKCR
如果出于某种原因您不这样做,
HKCR\LibreOffice.Docx\shell\open\command
"C:\Program Files\LibreOffice\program\swriter.exe" -o "%1"
纯Powershell等效
从管理PowerShell控制台运行,这会创建相同的键/条目:
输出:
有了@keith Miller的答案,我可以使我的原始代码工作以相关联的扩展名,
swriter.exe
如下所示: