powershell - 如何从上下文菜单对文件运行 PowerShell 脚本?
问题描述
我写了一个 PS 脚本,它替换文件开头的特定字符串,在文件末尾添加另一段字符串,最后输出一个 XML。
我的代码可能很难看(我不是程序员/工程师或其他任何人,只是想让一些经营小型企业的家庭成员的生活更轻松),但它确实有效:
$content = Get-Content -Path 'C:\Users\blabla\Desktop\4440341930.txt'
$newContent = $content -replace 'text to be replaced','this is going to replace stuff'
$newContent | Set-Content -Path 'C:\Users\blabla\Desktop\4440341930.txt'
Add-Content C:\Users\blabla\Desktop\4440341930.txt '</Items>'
$x = [xml](Get-Content "C:\Users\blabla\Desktop\4440341930.txt")
$x.Save("C:\Users\blabla\Desktop\4440341930.xml")
我希望他们能够通过右键单击 txt 文件从上下文菜单中运行此脚本。我做了一些研究,我得到了我必须添加到注册表的内容,但是,我不确定如何使它工作。由于他们要右键单击的每个文件的路径会有所不同,因此我在 $content 中指定的路径将不起作用。
我必须在我的代码中修改什么才能将其添加到注册表中?
解决方案
为此,您需要:
- 在 SendTo 文件夹中创建快捷方式:“$DestinationPath\AppData\Roaming\Microsoft\Windows\SendTo”
- 目标:“C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe”
- 论据: -File "d:\path\your PS1 file"
- 在您的程序中,将 Explorer 传递的文件名读取为:
Param
(
[Parameter(Mandatory=$false)]
[String] $FilePath
)
我编写了一个设置函数来完成步骤 1-3,我将其包含在上下文菜单中我想要的所有程序中,然后使用 -Setup 开关运行程序。我们不应该在这里发布开发的代码,但如果您无法弄清楚,请告诉我,我会发布它并希望我不会因此而被杀。哈哈!
更新:
如果你想传递多个文件,你需要稍微不同地处理这些文件。删除上面的 Param 块,然后使用这种类型的代码来检索文件。
If ($Args.count -eq 0) {
$Message = "No Files were passed from File Explorer."
[Void]$MsgBox::Show(
"$Message","System Exit",$Buttons::OK, $MBIcons::Stop)
Show-PowerShell
Exit #Comment out for testing from ISE!
}
Else {
$FilesToCopy = $Args
}
推荐阅读
- sql - 在 SQL 表中创建唯一约束时出现语法错误
- csv - 在 csv 文件的第一行末尾添加分号 -groovy
- hugo - 如何修复我的 Hugo 社交分享部分中的链接不可抓取
- node.js - 由于数据库中有多个用户名(nodejs、jade、npm),Passportjs 登录无效
- vba - 将访问字段插入单词表
- python-3.x - dask 合并失败并出现 keyerror
- c++ - C++ 程序在 Visual Studio 2010 中编译但不是 Mingw
- python - matplotlib 中 -: 'str' 和 'str' 不支持的操作数类型
- laravel - Laravel 将数据从 Event 发送到 Listener 并获得 Unresolvable dependency resolve [Parameter #0] 错误
- javascript - 检测用于 polyfill 的 iOS 指针捕获错误