I recently found myself on a Windows 10 system needing to do the equivalent of “find . -name *.mdi -exec mdiconvert -source {} -log log.txt \;” I knew what to do instantly on a Unix system, not so on a Windows system
I finally figured it out and am now writing it down because I know I’ll forget! Thanks to these several sites for pointing me in the right direction.
- Get-ChildItem is the find equivalent
- -Filter is the -name equivalent
- -Recurse must be specified otherwise it only looks in the one directory
- % is an alias for “ForEach-Object
- Put the command you want run in brackets {}
- Put an ampersand in front of the command you wish to run so you can properly pass arguments containing dashes
- $_.FullName turns the powershell object into a text string (which my command required.) FullName is the full path of the item found with Get-ChildItem
- $_ is the rough equivalent of find’s {} (the item that was found)
The command I ended up using is below (find any .mdi files and use Microsoft’s mdi2tif utility to convert the result to .tif files)
Get-ChildItem "C:\Users" -Recurse -Filter *.mdi | % { & 'C:\Program Files (x86)\modiconv\MDI2TIF.EXE' -source $_.FullName -log log.txt }