批处理文件:将带有.out扩展名的文件复制到剪贴板(未知目标)

时间:2016-03-29 20:38:34

标签: batch-file copy

我想创建一个批处理文件,将文件夹中的所有.out文件复制到剪贴板。 (类似于突出显示多个文件,右键单击并选择复制)。我似乎无法在不知道目的地的情况下找到复制文件的方法。可能吗?

感谢。

3 个答案:

答案 0 :(得分:3)

右键单击Windows资源管理器中的文件并选择“复制”时,不会将该文件的路径复制为文本数据。试试吧。右键单击 - 复制桌面上的文件,然后尝试粘贴到记事本或其他文本编辑器中。没什么,对吧?

不,您需要使用某些.NET方法来复制文件指针,以便Windows允许您粘贴以执行文件复制操作。这是通过调用Clipboard.SetFileDropList()方法完成的。

这是一个公开此方法的批处理+ PowerShell脚本解决方案。用.bat扩展名保存。

<# : batch portion
@echo off & setlocal

set "filemask=*.out"
powershell -STA -noprofile "iex (${%~f0} | out-string)"
goto :EOF

: end batch / begin PowerShell hybrid code #>

$collection = new-object Collections.Specialized.StringCollection
gci $env:filemask | %{ $collection[$collection.Add($_.FullName)] }

Add-Type -AssemblyName System.Windows.Forms
[Windows.Forms.Clipboard]::SetFileDropList($collection)

关注Paul's request,您可以通过regexp进行一些小调整,以便匹配多个扩展程序。

<# : batch portion
@echo off & setlocal

set "rxp=\.(out|dat|log)$"
powershell -STA -noprofile "iex (${%~f0} | out-string)"
goto :EOF

: end batch / begin PowerShell hybrid code #>

$collection = new-object Collections.Specialized.StringCollection
gci | ?{ $_.Name -match $env:rxp } | %{ $collection[$collection.Add($_.FullName)] }

Add-Type -AssemblyName System.Windows.Forms
[Windows.Forms.Clipboard]::SetFileDropList($collection)

只是因为我觉得接受LinuxDisciple's challenge,这是一个从命令行接受文件掩码的解决方案。

<# : batch portion
@echo off & setlocal

if "%~1"=="" (
    echo Usage: %~nx0 filemask [filemask [filemask [...]]]
    echo    example: %~nx0 *.jpg *.gif *.bmp
    goto :EOF
)

(for %%I in ("%~f0";%*) do @for %%# in ("%%~I") do @echo(%%~f#) | ^
powershell -STA -noprofile "$argv = $input | ?{$_}; iex (${%~f0} | out-string)"

goto :EOF
: end batch / begin powershell #>

$col = new-object Collections.Specialized.StringCollection
$argv[1..($argv.length-1)] | ?{$_.length -gt 3 -and (test-path $_)} | %{$col[$col.Add($_)]}

if ($col.Count) {
    Add-Type -AssemblyName System.Windows.Forms
    [Windows.Forms.Clipboard]::SetFileDropList($col)
}

答案 1 :(得分:2)

Access clipboard in Windows batch file
它使用.getData从剪贴板获取信息,但是还有.setData选项,允许您使用文件数据填充复制/粘贴缓冲区。您的问题的答案是,没有办法直接使用批处理,但使用此WSH黑客,您至少可以避免使用Windows外部的工具。

答案 2 :(得分:1)

SPOOL

将连接* .out文件并将结果放在剪贴板上。