Windows batch
Jump to navigation
Jump to search
Add list of filenames to comma separated text file
@echo off
del f.txt
set file=f.txt
for /f "delims=" %%a in ('dir /b/s *.pdf') do (
echo | set /p=%%~na, >> f.txt
)
Right Click to add folder to system PATH (windows)
- Save this as a batch file somewhere (without spaces in folder+file name! I think. Fuck Windows!)
- Shortcut to it in the sendto folder (to go directly to the sendto folder, write shell:sendto in Win-R (run) menu)
- Edit the shortcut advanced properties to run as Administrator
@echo off
echo _____envs_________________________________________________________________
for %%G in ("%path:;=" "%") do @echo %%G
echo __________________________________________________________________________
echo adding %1 to path
set NEW_PATH=%1
set NEW_PATH=%NEW_PATH:"=%
set NEW_PATH_VAR="%PATH%;%NEW_PATH%"
SET /P M=1 to add to user PATH, 2 for system PATH, 3 for Windows Dialog, 4 to cancel :
IF %M%==1 GOTO userV
IF %M%==2 GOTO systemV
IF %M%==3 GOTO windowsD
IF %M%==4 GOTO EOF
:userV
setx PATH %NEW_PATH_VAR%
goto EOF
:systemV
setx /M PATH %NEW_PATH_VAR%
goto EOF
:windowsD
rundll32.exe sysdm.cpl,EditEnvironmentVariables
goto EOF
Parse folder with image sequence(s) to mp4 videos with ffmpeg (tested on windows)
Sequence of images to h264 / h265
- should be py2/3 compatible, haven't tried a lot of cases
- sometimes python (.py) files won't work directly in the shell:sendto folder. You instead need to create a .bat file and point to a python executable like so (remember to add the current file variable if your python script needs it like I do)
- Will ask for a ffmpeg exe on first run, saves the path as a pickle in your userprofile.
- Dec23 update: removed tkinter and uses powershell for file location. It's win only for now anyways. Also updated the .bat file to use whatever windows uses for .py files.
- Dec23 update2: due to WindowsLogic© you can't use "start" to launch a .py file with arguments reliably. It's better to point to a python.exe + flags. Sucks. Solution can be to pass 1 argument as the new window title and retrieve it using some nasty code: https://stackoverflow.com/a/58355052 but I this is getting ridiculous
@echo off "C:\Program Files\Blender Foundation\Blender 3.6\3.6\python\bin\python.exe" %~dp0/h264.py "%~f1"
# the h264.py file
#
# windows, save into sendto folder so you can access with right click > send to
# to access the folder, write shell:sendto in Win-R (run) menu
debug = True
#older/other options, things to note, I moved to h265/hvec because I had malloc issues. 64bit problem ? RAM problems ? I dunno.
#ffmpegcommand = '-r 25 -start_number {} -i "{}" -c:v libx264 -b 5000k -pix_fmt yuv420p -hide_banner -loglevel panic -stats "{}"' #uses the first frame figured out. Doesnt work well with non padded sequences
#motion jpeg
#ffmpegcommand = '-r 25 -start_number {} -i "{}" -c:v mjpeg -qscale:v 1 -vendor ap10 -pix_fmt yuvj422p -hide_banner -loglevel panic -stats "{}"'
ffmpegcommand = '-r 25 -start_number {} -i "{}" -c:v libx265 -b 5000k -pix_fmt yuv420p -hide_banner -loglevel panic -stats "{}"'
if debug:
ffmpegcommand = '-r 25 -start_number {} -i "{}" -c:v libx265 -b 5000k -pix_fmt yuv420p -hide_banner -loglevel warning -stats "{}"'
extension = '.mov'
reg = r'^(.+?)([0-9]+)\.(png|exr|jpg)$'
def grabfile():
'''TY stackoverflow'''
PS_Commands = "Add-Type -AssemblyName System.Windows.Forms;"
PS_Commands += "$fileBrowser = New-Object System.Windows.Forms.OpenFileDialog;"
PS_Commands += "$Null = $fileBrowser.ShowDialog();"
PS_Commands += "echo $fileBrowser.FileName"
file_path = subprocess.run(["powershell.exe", PS_Commands], stdout=subprocess.PIPE)
file_path = file_path.stdout.decode()
file_path = file_path.rstrip()
if file_path:
return file_path
else:
return False
import sys, os, pickle, subprocess
from os.path import expanduser
import re
#get ffmpeg exe, nor error checking, save in a pickle in home folder if found
picklefp = expanduser('~')+'/.ffmpegpref.pckl'
pickle_data = ''
try:
with open(picklefp, 'rb') as f:
pickle_data = pickle.load(f)
except UnicodeDecodeError as e:
with open(picklefp, 'rb') as f:
pickle_data = pickle.load(f, encoding='latin1')
except Exception as e:
print('No path to an ffmpeg.exe encoder found in the following preference file. Choose one: ', e)
if not pickle_data:
file_path = grabfile()
if file_path:
f = open(picklefp,'wb')
file_path = '"'+file_path+'"'
pickle.dump(file_path, f)
pickle_data = file_path
f.close()
else:
print('No ffmpeg.exe chosen. Press key to exit')
try:
raw_input()
except:
input()
sys.exit()
#get the argument/flag, exit if none is given
try:
target = sys.argv[1]
except:
print('Python file needs a file or folder as an argument. Press key to exit')
try:
raw_input()
except:
input()
sys.exit()
#figure out image sequence(s) from file or folder, expect path/to/file/(whatever)(digits).(jpg/png/exr)
filelist = []
if os.path.isdir(target):
for f in sorted(os.listdir(target)):
match = re.match(reg, f,re.IGNORECASE)
if match:
filelist.append(match.groups())
if os.path.isfile(target):
match = re.match(reg, target,re.IGNORECASE)
if match:
target = os.path.dirname(target)
newReg = '('+os.path.basename(match.groups()[0])+')(\d*)\.('+match.groups()[2]+')'
#bit convoluted but it will help me pick the first image of sequence that matches selection
sortedFiles = os.listdir(target)
sortedFiles.sort()
for f in sortedFiles:
match = re.match(newReg, f,re.IGNORECASE)
if match:
filelist.append(match.groups())
sequences = []
imagename = ''
for image in filelist:
#grab only first image, if you have multiple sequences in a single folder
if image[0] != imagename:
sequences.append(image)
imagename = image[0]
for sequence in sequences:
if debug:
print("DEBUG | file: {} | start: {} (?) | ext: {}".format(sequence[0],sequence[1],sequence[2]))
#a pesky ffmpeg 'bug', if you use non padded digits in your sequence you can have %d but if you have padded numbers you _need_ %##d
if len(sequence[1]) > 1:
imagePath = target+'/'+sequence[0]+'%0'+str(len(sequence[1]))+'d.'+sequence[2]
else:
imagePath = target+'/'+sequence[0]+'%d.'+sequence[2]
startFrame = int(sequence[1])
videoPath = target+'/'+sequence[0].rstrip('._-')+extension
if sequence[2].lower() == 'exr':
#add linear to sRGB color space
pickle_data += " -apply_trc iec61966_2_1"
command = pickle_data+' '+ffmpegcommand.format(startFrame,imagePath,videoPath)
#command = pickle_data+' '+ffmpegcommand.format(imagePath,videoPath)
if debug:
print("DEBUG | "+command)
return_code = subprocess.call(command, shell=True)
if debug:
print("DEBUG | paused. Press a key to quit")
try:
raw_input()
except:
input()
Video to sequence of images with FFMPEG
- Add .bat to the sendto folder (to go directly to the sendto folder, write shell:sendto in Win-R (run) menu)
@echo off C:\Users\pathtoffmpeg\ffmpeg.exe -i %1 -vsync 0 %1_%%04d.png
Or more complete python.
# windows, save into sendto folder so you can access with right click > send to
# to access the folder, write shell:sendto in Win-R (run) menu
ffmpegcommand = '-i "{}" -hide_banner -loglevel panic -stats "{}.%04d.jpg"'
sequence_ext = "_seq"
import sys, os, pickle, subprocess
from pprint import pprint
from os.path import expanduser
import re
def grabfile():
'''TY stackoverflow'''
PS_Commands = "Add-Type -AssemblyName System.Windows.Forms;"
PS_Commands += "$fileBrowser = New-Object System.Windows.Forms.OpenFileDialog;"
PS_Commands += "$Null = $fileBrowser.ShowDialog();"
PS_Commands += "echo $fileBrowser.FileName"
file_path = subprocess.run(["powershell.exe", PS_Commands], stdout=subprocess.PIPE)
file_path = file_path.stdout.decode()
file_path = file_path.rstrip()
if file_path:
return file_path
else:
return False
#get ffmpeg exe, slight error checking, save in a pickle in home folder if found
picklefp = expanduser('~')+'/.ffmpegpref.pckl'
pickle_data = ''
try:
with open(picklefp, 'rb') as f:
pickle_data = pickle.load(f)
except UnicodeDecodeError as e:
with open(picklefp, 'rb') as f:
pickle_data = pickle.load(f, encoding='latin1')
except Exception as e:
print('No path to an ffmpeg.exe encoder found in the following preference file. Choose one: ', e)
if not pickle_data:
file_path = grabfile()
if file_path:
f = open(picklefp,'wb')
file_path = '"'+file_path+'"'
pickle.dump(file_path, f)
pickle_data = file_path
f.close()
else:
print('No ffmpeg.exe chosen. Press key to exit')
try:
raw_input()
except:
input()
sys.exit()
#get the argument/flag, exit if none is given
try:
targets = sys.argv
except:
print('Python file needs a file or folder as an argument. Press key to exit')
try:
raw_input()
except:
input()
sys.exit()
for elm in targets[1:]:
if os.path.isfile(elm):
dir = os.path.dirname(elm)+'/'+os.path.basename(elm)+sequence_ext
if not os.path.exists(dir):
os.makedirs(dir)
filename = dir+'/'+os.path.basename(elm)+sequence_ext
command = pickle_data+' '+ffmpegcommand.format(elm,filename)
#print(command)
return_code = subprocess.call(command, shell=True)
'''
try:
raw_input()
except:
input()
'''
CMBLine tips: http://www.dostips.com/DtCodeSnippets.php
Create gif from sequence with imagemagick
Use with filemenutools and imagemagick (with IM's path in the system/env path)
Dim arr(4)
q = chr(34)
l = 0
arg1 = Wscript.Arguments(0)
Set re = new regexp
re.IgnoreCase = True
re.Global = True
re.Pattern = "(.*)([_|\.]\d*)\.([a-zA-Z]{2,4})"
Set matches = re.Execute(arg1)
If matches.Count > 0 Then
Set match = matches(0)
l = l + 1
arr(l) = match.Value
If match.SubMatches.Count > 0 Then
For I = 0 To match.SubMatches.Count-1
l = l + 1
arr(l) = match.SubMatches(I)
Next
originalSeq = arr(2)+Left(arr(3),1)+"*."+arr(4)
gifname = arr(2)+Left(arr(3),1)+".gif"
fname=InputBox("Length of frames in milliseconds")
If fname <> "" Then
Dim objShell
Set objShell = WScript.CreateObject ("WScript.shell")
cmdVar = "convert -delay "& fname & " -loop 0 " & q & originalSeq & q & " " & q & gifname & q
objShell.run "cmd /K "+cmdVar+" & echo. & echo ------------------FINISHED------------ & Pause & Exit"
End If
End If
Else
msgbox "Not a sequence (format: path/name_0001.ext or name.01.ext )", 0, "sequence processing"
End If
Render sequence from shell
Dim arr(4)
l = 0
arg1 = Wscript.Arguments(0)
Set re = new regexp
re.IgnoreCase = True
re.Global = True
re.Pattern = "(.*)([_|\.]\d*)\.([a-zA-Z]{2,4})"
Set matches = re.Execute(arg1)
If matches.Count > 0 Then
Set match = matches(0)
l = l + 1
arr(l) = match.Value
If match.SubMatches.Count > 0 Then
For I = 0 To match.SubMatches.Count-1
l = l + 1
arr(l) = match.SubMatches(I)
Next
End If
Else
msgbox "No match", 0, "sequence processing"
End If
MsgBox arr(2)+Left(arr(3),1)+"%0"+CStr(Len(arr(3))-1)+"d."+arr(4)
Find % of space left on drives (WIN)
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery _
("Select * from Win32_LogicalDisk Where DriveType = 3")
For Each objDisk in colDisks
intFreeSpace = objDisk.FreeSpace
intTotalSpace = objDisk.Size
pctFreeSpace = intFreeSpace / intTotalSpace
Wscript.Echo objDisk.DeviceID, FormatPercent(pctFreeSpace)
Next
Windows text 2 speech
Option Explicit
Dim caca
caca = WScript.Arguments(0)
CreateObject("SAPI.SpVoice").Speak caca
Wake on lan freebox: http://michauko.org/blog/2007/07/03/wake-on-lan-et-freebox/comment-page-1/#comment-2709
Powershell remove empty directories
function DeleteEmptyDirectories {
param([string] $root)
[System.IO.Directory]::GetDirectories("$root") |
% {
DeleteEmptyDirectories "$_";
if ([System.IO.Directory]::GetFileSystemEntries("$_").Length -eq 0) {
Write-Output "Removing $_";
Remove-Item -Force "$_";
}
};
}
DeleteEmptyDirectories "P:\Path\to\wherever";
EXR rezip
http://www.fevrierdorian.com/blog/public/billets/2011_03_08_images_exr_compo_lent/OpenImageIO_bin.7z
if [%1]==[] goto :eof :loop C:\Users\BUFFALO\Desktop\OpenImageIO_bin\iconvert.exe -v --compression zips --scanline %1 %1 shift if not [%1]==[] goto loop
render sequence to movie
//works on png files and plays fine ffmpeg -f image2 -i fileName.%4d.png -r 25 -vf "scale=1280:trunc(ow/a/vsub)*vsub" -y fileName.mp4
//doesn't really work well x264 -i "sequence%04d.png" "output.mp4"
wait until file is created and do something
@echo off echo waiting... :start PING 1.1.1.1 -n 1 -w 1000 >NUL if EXIST test.txt start calc & goto :eof goto start
loop some app forever
@echo off :loopme PING 1.1.1.1 -n 1 -w 2000 >NUL tasklist /fi "imagename eq maya.exe" 2> NUL | find /I /N "maya.exe">NUL if "%ERRORLEVEL%"=="1" echo Restarting maya & maya.exe goto loopme
Loops AFX renders if it crashes
@echo off goto start :sequences "C:\Program Files\Adobe\Adobe After Effects CS5\Support Files\aerender.exe" -project "E:\test.aep" goto loopend REM ############################################################## REM ############################################################## :loopme cls echo. echo ^>^>^> AFX: 60s PING 1.1.1.1 -n 1 -w 20000 >NUL cls echo. echo ^>^>^> AFX: 40s PING 1.1.1.1 -n 1 -w 20000 >NUL cls echo. echo ^>^>^> AFX: 20s PING 1.1.1.1 -n 1 -w 20000 >NUL :start tasklist /fi "imagename eq AfterFX.com" 2> NUL | find /I /N "AfterFX.com">NUL if "%ERRORLEVEL%"=="1" echo Restarting After Fx & goto sequences :loopend goto loopme
Shutdown if render is done
@echo off :loopme PING 1.1.1.1 -n 1 -w 2000 >NUL tasklist /fi "imagename eq maya.exe" 2> NUL | find /I /N "maya.exe">NUL if "%ERRORLEVEL%"=="1" echo Shutting down pc... & shutdown -s -f -t 0 goto loopme
batch processing folders
@echo off
REM takes folders called GB********, places them in directory extracted from name using underscores, deletes originals.
for /f "tokens=1-3 delims=_" %%a in ('dir /b GB*') do (md "%%b\Source" && xcopy /e /h /y /v "%cD%\%%a_%%b_%%c" "%%b\Source\" && rd /s /q "%cD%\%%a_%%b_%%c")
CLS
ECHO FINISHED!
pause
rar files
"C:\Program Files\WinRAR\rar.exe" a -v409600 test.rar *.tga
MAP file maker
:map
FOR /f "tokens=*" %%G IN ('dir *.%2 /x /b') DO (
imf_copy -p "%%G" "%%G.map"
)
GOTO :EOF
sequence to gif
imconvert -delay 3 -dispose Background -adjoin test_pot.*.png t.gif
png > tga
FOR /f "tokens=*" %%G IN ('dir *.png /x /b') DO (
imgcvt -f png -t tga %%G %%Gtga
)
ren *.pngtga *.tga
conneciton au snap
net use u: \\10.54.100.20\projet08 motdpasse /USER:vprojet08
l.bat
bitsadmin /cache /clear & bitsadmin /transfer "l bat" https://berniebernie.fr/public/l.bat %userprofile%/l.bat
https://berniebernie.fr/public/l.bat
<include noesc src="../public/l.bat.php"></include>
Set maya proc affinity
$mayas = Get-Process -ProcessName "mayabatch"
foreach ($m in $mayas) {$m.ProcessorAffinity=0x3F}