I'd like to get files/folders selected in Everything (or any other file manager for that matter) into a Powershell array, so that I can process and do things with each file in Powershell. I know I can pass the selected files to a Powershell script using a context menu option, that's one way, but not always what I want.
I've also found that I can do a Ctrl+C copy of selected files/folders to the clipboard, and then use the Get-Clipboard cmdlet to pass them into a Powershell array. It seems you have to use the "-Format FileDropList" parameter in Windows Powershell to do this. (It also seems that the -Format FileDropList parameter is not available in the multi-platform Powershell Core.) I think I can use this to do what I want, but it does involve the extra step of copying the files in Everything before I invoke the Powershell script.
I've also looked for a direct way to get the selected files into an array, but haven't yet found how Powershell can see what files/folders are selected in a particular Explorer or Everything window and get them. I found this post in Superuser asking how to do it: https://superuser.com/questions/1379280 ... powershell - but no one could tell him how to do it.
I'm sure I could do this through Autohotkey, but it does seem like Powershell should be able to do this directly. Any ideas? It seems like it would be a good way to make Everything even more powerful.
how to get files selected in Everything into a Powershell array
Re: how to get files selected in Everything into a Powershell array
The following AHK script takes the current Everything GUI results
and write them into a text file.
May be the core part of it gives you some ideas how to do that in Powershell.
and write them into a text file.
May be the core part of it gives you some ideas how to do that in Powershell.
Code: Select all
; Transfer Everything GUI results to TC
; Authors: Horst.Epp & Ovg (based on a script from user Highend in XYplorer forum)
; Last modified: 04.10.2022 (Changed regex by Ovg)
; https://www.ghisler.ch/board/viewtopic.php?t=75439 ...... Open Everything GUI results with TC LOADLIST
; https://www.ghisler.ch/board/viewtopic.php?t=75417 ...... LOADLIST command and UTF8 file lists
; https://www.voidtools.com/forum/viewtopic.php?f=4&t=10594 Send ResultsList to Total Commander
; Build AutoHotkey_L
; Build x64
; Build Kill=true
; Build Zip=false
; Build Run=true
#NoEnv
;#Persistent
#SingleInstance Force
SetBatchLines, -1
; Create / read .ini file settings
SetTitleMatchMode, RegEx
iniFile := RegExReplace(A_ScriptFullPath, "(ahk|exe)$", "ini")
if not (FileExist(iniFile)) {
iniContent :="
(( LTrim
[General]
; DestinationFile
; Where to save the output (full path to DestinationFile.txt)
; EverythingColumnPositions (Default: 2,1)
; The columns 'Name' and 'Path' must be visible in the Everything GUI Window
; The first value is the position of the 'Path' column
; The second value is the position of the 'Name' column
; CloseEverything (Default 1 for yes)
; Should Everything GUI window be closed after transfering to TC
; UseInstance (Empty for default instance)
; Name of the Everything instance to be used for closing the GUI
; The contents of the following lines must be adjusted if necessary, e.g. path and parameter adjustments.
;********************************************************************************************************
DestinationFile = C:\Tools\Wincmd\Scripts\Results\Everything.txt
EverythingColumnPositions=2,1
AddEndSlash = 1
CloseEverything = 1
UseInstance =
Everything = C:\Tools\Everything\Everything64.exe
TotalCmd = C:\Tools\Wincmd\totalcmd64.exe
;********************************************************************************************************
)"
FileAppend, % iniContent, % iniFile, UTF-16
}
IniRead, DestinationFile, % iniFile, General, DestinationFile, %A_Space%
IniRead, EverythingColumnPositions, % iniFile, General, EverythingColumnPositions, 2`,1
IniRead, AddEndSlash, % iniFile, General, AddEndSlash, 1
IniWrite, %AddEndSlash%, % iniFile, General, AddEndSlash
IniRead, CloseEverything, % iniFile, General, CloseEverything, 1
IniWrite, %CloseEverything%, % iniFile, General, CloseEverything
IniRead, UseInstance, % iniFile, General, UseInstance, %A_Space%
IniWrite, %UseInstance%, % iniFile, General, UseInstance
IniRead, Everything, % iniFile, General, Everything, "C:\Tools\Everything\Everything64.exe"
IniRead, TotalCmd, % iniFile, General, TotalCmd, "C:\Tools\Wincmd\totalcmd64.exe"
DestinationFile := ResolveEnvVars(DestinationFile)
EverythingColumnPositions := StrReplace(EverythingColumnPositions, " ")
; Force error if none is given (or path doesn't exist)
SplitPath, DestinationFile, , dstPath
if (DestinationFile = "" || !InStr(FileExist(dstPath), "D")) {
Msgbox, 16, Fatal error, Destination file definition is missing or illegal named !
Return
}
if (EverythingColumnPositions = "" || !InStr(EverythingColumnPositions, ",")) {
EverythingColumnPositions := "2,1"
}
columnArray := StrSplit(EverythingColumnPositions, ",")
hWnd := WinExist("ahk_exe Everything(?:\d\d)*\.exe")
if hWnd
{
ControlGet, winContent, List, , SysListView321, % "ahk_id" hWnd
if (winContent)
{
fullContent := ""
; Loop over row(s)
Loop, Parse, winContent, `n
{
rowID := A_Index
path := ""
name := ""
full := ""
Bad := 2
; Loop over column(s)
Loop, Parse, A_LoopField, % A_Tab
{
colID := A_Index
content := A_LoopField
If (colID > columnArray[1] And colID > columnArray[2])
{
Break
}
Else
{
If (colID = columnArray[1])
{
; If !RegExMatch(content,"i)^[a-z]:|\\\.*?\\")
If !RegExMatch(content,"i)^(?:[a-z]:|\\\.*?\\)")
{
Break
}
path := content
Bad -= 1
If !RegExMatch(path,"\\$")
{
path := path . "\"
}
}
Else if (colID = columnArray[2])
{
If content is Space
{
Break
}
name := content
Bad -= 1
}
}
}
If (Bad == 0)
{
full := path . name
If InStr(FileExist(full), "D")
{
if (AddEndSlash == 1)
{
if !RegExMatch(full,"\\$")
{
full := full . "\"
}
}
Else
{
If RegExMatch(full,"\\$")
{
full := SubStr(full,1,StrLen(full)-1)
}
}
}
fullContent .= full "`n"
}
}
fullContent := RegExReplace(fullContent,"\R$","")
If (FileExist(DestinationFile))
FileDelete, % DestinationFile
FileAppend, % fullContent, % DestinationFile, UTF-16
DestinationDir := SubStr(DestinationFile,1,InStr(DestinationFile, "\",,-1))
Run %TotalCmd% /O /T /S LOADLIST:%DestinationFile%
If (CloseEverything) {
run %Everything% -instance "%UseInstance%" -close
}
}
Else
; Empty search result
{
Msgbox, 16,, Search result is Empty, Nothing to do ...
}
; No Everything window visible
} Else {
Msgbox, 16, Fatal error, Everything window does not exist!
}
SetTitleMatchMode, 1
return
; ==================================
; = GOTO: FUNCTIONS - ResolveEnvVars
; ==================================
; http://www.autohotkey.com/board/topic/40115-func-envvars-replace-environment-variables-in-text/#entry310601
ResolveEnvVars(str) {
if sz := DllCall("ExpandEnvironmentStrings", "uint", &str, "uint", 0, "uint", 0)
{
VarSetCapacity(dst, A_IsUnicode ? sz * 2 : sz)
if DllCall("ExpandEnvironmentStrings", "uint", &str, "str", dst, "uint", sz)
return dst
}
return str
}
Re: how to get files selected in Everything into a Powershell array
Thank you horst.epp I haven't had time to look at the AHK script yet but I definitely will.