【问题标题】:Need Windows command file that runs all commands in a folder [closed]需要运行文件夹中所有命令的 Windows 命令文件 [关闭]
【发布时间】:2019-09-24 03:07:09
【问题描述】:

https://www.online-tech-tips.com/computer-tips/create-windows-batch-files/ 解释了如何创建打开一组特定 Windows 命令的命令(批处理)文件。我想概括一下,所以我可以创建包含命令快捷方式的文件夹并运行这样的文件夹(使用命令文件),这意味着我可以使用命令文件执行文件夹中包含的所有命令快捷方式。

我在网上搜索过,找不到这样的命令文件。

我认为我需要的只是一种扫描文件夹并循环执行文件夹中每个命令的方法。可能一个 Windows 标准 .cmd 文件(由 cmd.exe 运行)可以做到这一点,但如果没有,可以使用 Powershell(由 .ps1 命令文件)。

例如,在桌面上创建一个文件夹,其中包含与某些特定和重复处理(例如,制作电影或构建应用程序)相关的多个命令快捷方式。我可以通过在资源管理器中打开文件夹来编辑这些命令。当我想在自己的窗口中运行所有命令时,我所要做的就是右键单击桌面上的文件夹,然后选择运行文件夹中所有快捷方式的命令文件的名称。

我希望这很清楚,并且很清楚为什么这样的命令文件在处理其他项目后返回项目时非常有用。

如果没有,请在 cmets 中提问。

【问题讨论】:

  • powershell 允许您将其他脚本调用到主脚本中。您可以将多个脚本保存到文件中,并将dot-source 它们保存到您的主文件中,然后运行代码。 ///// 我承认你的目标对我来说毫无意义。 [blush] 为什么不直接编写脚本来执行您想要的操作,而无需担心代码会运行您不打算运行的东西的可怕风险?
  • 太糟糕了,太宽泛了。大量问题,没有提供代码。
  • 抱歉,我不知道如何开始编写这样的命令文件。对于熟悉 Windows 的人来说,这个目标应该很有意义,因为 Windows 启动文件已经以这种方式工作(它们在启动期间由 Windows 自动执行,这是唯一的区别)。请参阅我所要求的已接受答案。

标签: windows powershell batch-file contextmenu shortcut-file


【解决方案1】:

我对“命令快捷方式”这个词感到困惑。如果您只想找到当前目录中的所有快捷方式文件,并在单独的窗口中启动每个快捷方式文件,那么您只需要这样。

gci *.lnk | % { start $_ }

【讨论】:

  • 这似乎工作得很好。我将不得不弄清楚如何通过右键单击文件夹来使其工作,但这应该不会太难。我希望其他人也能从这段代码中受益,谢谢。
  • 好的。我在文件夹的上下文菜单中添加了一个命令,如下所示:(1)添加了新的注册表项 HKEY_CLASSES_ROOT\Folder\shell\runlinks,默认值为“runlinks”; (2) 添加了新键 HKEY_CLASSES_ROOT\Folder\shell\runlinks\command,默认值为 "C:\ProgFile\Runlinks.ps1" "%1" 。当我通过右键单击测试文件夹并从上下文菜单中选择“运行链接”来测试它时,我会看到一个亮蓝色对话框,其中包含“此应用程序无法在您的 PC 上运行”消息。我被困在这一点上。
  • 由于您决定为所有配置文件创建上下文菜单,而不是 Current_User,因此您可能没有适当地设置 ExecutionPolicy 以供所有人使用。
  • 我也会问目的!我看不到右键单击文件夹并左键单击菜单项而不是双击该文件夹并双击脚本的好处。
  • 我将尝试将我的两个密钥移动到 CU 而不是 LM。我没有意识到这可能是个问题。至于目的,我希望有几个文件夹包含与特定任务相关的链接(任意数量的链接),并一次执行所有这些链接(快捷方式)。双击很多图标是适合计算机自动化的操作。
【解决方案2】:

Walter Mitty's helpful answer 显示一个 PowerShell 命令,它使用Start-Process 打开当前文件夹中的所有快捷方式文件 (*.lnk)。

以下代码将其合并到名为Open Shortcuts 的快捷菜单命令定义中,该定义将变为可用:

  • 在桌面或文件资源管理器中右键单击文件夹时

  • 当您在文件资源管理器中右键单击打开文件夹的背景时(在这种情况下,该命令将应用于该打开的文件夹)。

如果给定文件夹中存在快捷方式文件,则它们都被打开(异步),就像它们被双击一样;如果没有快捷方式,则会显示警告。

请注意,我的目标是 HKEY_CURRENT_USER\Software\Classes 而不是 HKEY_CLASSES_ROOT,这使得定义是用户特定的,并且也不需要运行提升:

# Define a shortcut-menu command that opens all shortcut files (*.lnk) in the target folder (%V):

# Define the name to appear in the shortcut menu.
$commandName = 'Open Shortcuts' 

# Define the PowerShell command to run, hidden, via mshta.exe, so that no PowerShell console window opens (temporarily).
$command = @"
mshta.exe vbscript:(CreateObject("WScript.Shell").Run("powershell.exe -noexit -noprofile -c `$f = Get-Item \""%V\*.lnk\""; if (`$f) { `$f | ForEach-Object { Start-Process `$_.FullName } } else { (New-Object -ComObject WScript.Shell).Popup(\""%V contains no shortcut files (*.lnk).\"",0,\""$commandName\"",48) }",0))(Window.Close)'
"@

# Define the shortcut-menu commands in the registry, for:
#  * folders
#  * the background of open folders (to apply the command to the open folder)
'Folder', 'Directory\Background' | ForEach-Object {
  New-Item -Force "HKCU:\Software\Classes\$_\shell\$commandName\command" |
    Set-ItemProperty -Name '(Default)' -Value $command
}

【讨论】:

  • 是的,这行得通!我很高兴。我将命令命名为“运行所有链接”,当我在文件夹上下文菜单中单击它时,所有链接都会运行而不会出现意外错误消息。完美的! Windows 的所有“高级用户”都应该感兴趣。
  • 很高兴听到这个消息,@DavidSpector;是的,这听起来很方便。
猜你喜欢
  • 2021-12-27
  • 1970-01-01
  • 2011-12-02
  • 1970-01-01
  • 2017-04-04
  • 2021-01-29
  • 1970-01-01
  • 2021-11-11
相关资源
最近更新 更多