How to execute python script on every file recursively on windows
So I have a python command that takes a file path as a command line argument. Let's say convert.py
.
On Linux I'm using the following script to run it on every file in a folder, recursively, using glob
for f in $1/**/*
do
python ./convert.py $f
done
Which I can call like sh ./script.sh src
.
Is there any way to do this on Windows? I found this which is close but I didn't quite get it.
Solution 1:
A quick idea is to use Get-ChildItem
with the -Directory
and -Recurse
options and use Start-Process
and its -ArgumentList
option to execute the python script passing it the full directory path.
1. Simple script (use to test specific folder(s))
$src = "C:\Folder\Path";
(Get-ChildItem $src -Directory -Recurse).FullName | % { Process {
Start-Process Python -ArgumentList "./convert.py $($_)" } };
2. PowerShell script with execution arg value
$src = $args[0];
(Get-ChildItem $src -Directory -Recurse).FullName | % { Process {
Start-Process Python -ArgumentList "./convert.py $($_)" } };
Executing the above #2 PowerShell script
powershell.exe -ExecutionPolicy Bypass -File "C:\PowerShell\PScript.ps1" "C:\Folder\123\678"
3. One more example (recursive files)
Note: In case the Python script needs the file path passed to it, use this example with the -File
parameter this will pass the file paths. I'm not sure what the Python script is doing though.
$src = "C:\Folder\Path";
(Get-ChildItem $src -Recurse -File).FullName | % { Process {
Start-Process Python -ArgumentList "./convert.py $($_)" } };
Supporting Resources
- Get-ChildItem
- Arrays
-
ForEach-Object
Standard Aliases for Foreach-Object: the '
%
' symbol, ForEach - Start-process