powershell - 从 Windows 资源管理器 'Send To' 菜单调用 powershell 命令

标签 powershell batch-file

我创建了一个 powershell 脚本,可以将选定的文件复制到预定位置。
我已经创建了一个批处理文件来从 Windows 资源管理器的“发送到”菜单调用 Powershell 脚本。
批处理文件将选定的文件名作为参数发送到脚本。文件名可以包含空格。 批处理文件代码为

powershell "C:\copycommand.ps1 '%1'"

选择多个文件时,我想将所有文件名作为数组发送到PowerShell脚本。
我已经编写了 powershell 脚本来接受数组,但我无法从批处理文件中将文件名作为数组发送。

下面的批处理脚本将所有文件名发送到批处理文件,但当文件名包含空格时会失败。

Powershell "C:\copycommand.ps1" %*

有没有一种方法可以将所有文件名发送到 powershell 脚本。

最佳答案

我的bat文件是这样的(最后一行只是为了调试,可以去掉):

@echo off
for %%x in (%*) do ( 
    powershell.exe  -Command "C:\copycommand.ps1 '%%x'"
)

powershell.exe  -noexit

我的 powershell 脚本是:

$args | %{ Write-host "do copy $_"}

示例输出为:

do copy C:\Users\Public\Desktop\SRWare Iron.lnk
do copy C:\Users\Public\Desktop\Mozilla Firefox.lnk
do copy C:\Users\Piotrek\Desktop\Windows 7 USB DVD Download Tool.lnk

更新版本

将 bat 文件更改为:

@echo off
set myvar=
for %%x in (%*) do call :concat %%x
echo %myvar%
powershell.exe  -Command C:\copycommand.ps1 %myvar%

powershell.exe  -noexit
goto :eof

:concat
set myvar=%myvar% '%1'
goto :eof

关于powershell - 从 Windows 资源管理器 'Send To' 菜单调用 powershell 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15932881/

相关文章:

powershell - 如何使用Powershell递归强制文件夹时间戳?

powershell - 打包一套 powershell cmdlet 以便在任何机器上快速部署?

powershell - 等待其他 session 中的多个同时Powershell命令完成,然后再运行下一个命令

powershell - 使用 PowerShell 从 Windows 10 中删除语言

c++ - 如何通过 C++ 检查我的程序是否在管理员权限下运行?

batch-file - cleanup-wim 说批量成功,但 wim 仍然是孤立的

powershell - 批量编写和执行Powershell脚本

PowerShell 更改文件和文件夹的所有者

sql - 批量选择记录

dos - 批量编程。先找到另一个字符串最后一次出现后查找字符串