【问题标题】:Execute PowerShell command on selected files in Explorer在资源管理器中的选定文件上执行 PowerShell 命令
【发布时间】:2016-02-03 13:49:05
【问题描述】:

如何在 PowerShell 中仅对资源管理器中的选定文件执行重命名命令?我有 PS 命令,但我不知道在 Windows 注册表中的哪个位置可以在资源管理器的右键单击上下文菜单中访问它。

【问题讨论】:

  • 我也对通过右键单击来添加(和运行)PowerShell 脚本非常感兴趣。如果可能的话,请告诉我:)
  • 不完全重复。那篇文章展示了如何通过右键单击资源管理器中的文件夹或文件夹的背景来打开 PowerShell。本题旨在通过右键菜单对文件运行 PowerShell 命令。
  • 可以说这个问题并不完全是重复的。这就是为什么我不只是关闭它。但是,如果您仔细查看答案,它们本质上是在展示如何运行命令。
  • 它们是不同配置单元中不同格式的不同注册表项。你无法通过拥有另一个来找出答案。并且每个脚本问题本质上都是在询问如何运行命令?

标签: powershell explorer


【解决方案1】:

HKCR:\*\shell 包含您需要的内容。使用您要调用的名称创建一个新键(例如“Rename With Date”),然后使用您的命令的默认值创建一个名为“Command”的子键。

例如,HKCR:\*\shell\Rename With Date\Command 的(默认)值是 PowerShell -Command Rename-Item "%1" ((Get-Date).ToShortDateString() + " - %1") 或者我认为应该做的事情。

【讨论】:

  • 实际上我怀疑这个特定的命令会起作用,因为 Rename-Item 只是期望第二个参数中的文件名,而不是整个路径,因此您需要拆分路径以获得文件名和扩展名但是我 cba 这只是 xP 的一个例子
  • 我在 powershell 会话中尝试了该命令,但它对日期返回的正斜杠感到不满。所以它需要类似'(get-date).toShortDateString().replace("/", "-") …)
【解决方案2】:

使用 Powershell 的 New-Item cmdlet 将命令行写入注册表,向文件资源管理器中的选定文件添加上下文菜单命令相当容易:

# Add a context-menu item named 'Foo' to the context menu of files 
# that executes a PowerShell command that - in this simple demonstration - 
# simply *echoes* the file path given, using Write-Output.
$null = New-Item -Force "HKCU:\Software\Classes\*\shell\Foo\command" | 
        New-ItemProperty -Name '(Default)' -Value `
         "$PSHOME\powershell.exe -NoProfile -NoExit -Command Write-Output \`"%1\`""

以上针对HKCU:\Software\Classes\*\shell (HKEY_CURRENT_USER\Software\Classes\*\shell),因此仅适用于文件;仅文件夹的位置是 HKCU:\Software\Classes\Folder\shell两个 文件和文件夹的位置是 HKCU:\Software\Classes\AllFileSystemObjects\shell
还要注意上面-LiteralPath 的使用,这对于防止将HKCU:\Software\Classes\* 中的* 解释为通配符至关重要。
请注意,写入等效的HKEY_LOCAL_MACHINE 键以使命令可供所有 用户使用需要elevation(以管理员身份运行)。

警告是,使用这种方法每个选定的文件调用命令,应该多个文件被选中。

换句话说:如果您的意图是重命名一个文件组,并且您的重命名逻辑要求将该组作为一个整体考虑,则上述方法不会'没用。

您可以尝试在脚本本身中解决这个问题,但这很重要。

一个更稳健的解决方案是创建上下文菜单处理程序,这需要编写“进程内组件对象模型 (COM) 对象实现为 DLL”(来自docs)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 2022-01-15
    • 2011-01-31
    • 1970-01-01
    相关资源
    最近更新 更多