我有一个非常强大的PowerShell脚本,可以完美运行:
Param(
[string]$fileName
)
echo "Woo I opened $fileName"
当我在命令行上运行它时,它可以工作:
my-script.ps1 .\somefile
返回:
Woo I opened somefile
我想将my-script.ps1
与特定文件类型相关联。我试图通过' Open With'但是:
如何将文件类型与Powershell脚本相关联?
答案 0 :(得分:4)
使用适当的工具:
cmd /c assoc .fob=foobarfile
cmd /c ftype foobarfile=powershell.exe -File `"C:\path\to\your.ps1`" `"%1`"
请注意,assoc
和ftype
都是CMD内置的,因此您需要通过PowerShell中的cmd /c
运行它们。
对于没有扩展名的文件,请使用此关联:
cmd /c assoc .=foobarfile
答案 1 :(得分:1)
我认为你不能通过Windows用户界面做到这一点。
这里的目标是将一个类型与powershell.exe相关联,其参数将是
要做到这一点
Regedit.exe
。 //免责声明:您正在编辑Windows注册表。 这里是老虎。 .<extension>
的密钥,例如如果你想关联* .zbs - 创建一个键.zbs
zbsfile
- 这是将您的扩展名与文件类型相关联的引用。zbsfile
的密钥 - 这是您的文件类型 zbsfile
shell
open
command
command
下,将(默认)值设置为例如powershell.exe -File "C:\path\to your\file.ps1" "%1"
这应该有效。
编辑:
或者(疯狂的想法),创建一个只做powershell.exe -File "C:\path\to your\file.ps1" "%%1"
的bat文件并在Windows UI中选择它...
答案 2 :(得分:1)
对于那些像我一样在这里寻找常规文件类型关联的人,我最终使用了此功能:
Function Create-Association($ext, $exe) {
$name = cmd /c "assoc $ext 2>NUL"
if ($name) { # Association already exists: override it
$name = $name.Split('=')[1]
} else { # Name doesn't exist: create it
$name = "$($ext.Replace('.',''))file" # ".log.1" becomes "log1file"
cmd /c 'assoc $ext=$name'
}
cmd /c "ftype $name=`"$exe`" `"%1`""
}
我一直在努力使用@Ansgar Wiechers's answer中的正确报价,但最终弄对了:)
答案 3 :(得分:1)
这是我对@Matthieu的完美混音,对@Ansgar Weichar的很好的答案。
Matthieu是为可执行文件设置的,出于与OP描述的相同原因,它们不适用于Powershell脚本。
Function Set-FileAssociationToPowerShellScript($extension, $pathToScript) {
# first create a filetype
$filetype = cmd /c "assoc $extension 2>NUL"
if ($filetype) {
# Association already exists: override it
$filetype = $filetype.Split('=')[1]
Write-Output "Using filetype $filetype"
}
else {
# Name doesn't exist: create it
# ".log.1" becomes "log1file"
$filetype = "$($extension.Replace('.', ''))file"
Write-Output "Creating filetype $filetype ($extension)"
cmd /c "assoc $extension=$filetype"
}
Write-Output "Associating filetype $filetype ($extension) with $pathToScript.."
cmd /c "ftype $filetype=powershell.exe -File `"$pathToScript`" `"%1`""
}
答案 4 :(得分:0)
这是在 Windows 7 下测试的具体答案(但也应在 10 下运行)。打开管理命令外壳并执行以下两行:
> assoc .ps1=Microsoft.PowerShellScript.1
> ftype Microsoft.PowerShellScript.1=%windir%\System32\WindowsPowerShell\v1.0\powershell.exe -File "%1"
现在 PS1 文件由 PowerShell 1.0 执行,在资源管理器中双击时不再由记事本打开。
答案 5 :(得分:0)
对于获取关联应用程序,我使用 [!magic] :) :
Set-Alias fa Get-AssocApp
#Get application by file extension Proto1
function Get-AssocApp ([string] $FileType) {
((cmd /c echo ((cmd /c ftype ( (cmd /c assoc $FileType) -replace "(.*=)*" ,"")) -replace "(.*=)","")).Replace('"','') -replace "\s%+.*$" ,"")
}
出:
PS C:\Users\user> fa .txt
C:\WINDOWS\system32\NOTEPAD.EXE
PS C:\Users\user> fa .pdf
C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe
PS C:\Users\user> fa .js
C:\Windows\System32\WScript.exe