Interesting thought [WayBack] In windows, can I redirect stdout to a (named) pipe in command line? – Super User.
The only problem seems to be a good way of creating/removing those pipes.
–jeroen
Posted by jpluimers on 2019/01/14
Interesting thought [WayBack] In windows, can I redirect stdout to a (named) pipe in command line? – Super User.
The only problem seems to be a good way of creating/removing those pipes.
–jeroen
Posted in Batch-Files, Development, Power User, Scripting, Software Development, Windows | Leave a Comment »
Posted by jpluimers on 2019/01/09
In my search for starting the Windows Credential Manager from the console, I found [WayBack] Credential Manager Shortcut – Create – Windows 7 Help Forums explaining:
%windir%\explorer.exe shell:::{1206F5F1-0569-412C-8FEC-3204630DFB70}
This reminded me of From batch file or shortcut: start Windows Update (via: Windows 7 Help Forums) and batch-file trick: Starting Windows Explorer and selecting a file (“explorer” commandline parameters “/n” “/e” “/select” “/root” “/start” site:microsoft.com).
The odd thing is that some of the GUID shortcuts works fine using the shell::: syntax, but fail with the /e:: syntax, for instance Windows Update until Windows 8.1:
%windir%\explorer.exe shell:::{36eef7db-88ad-4e81-ad49-0e313f0c35f8}
%windir%\explorer.exe /e,::{36eef7db-88ad-4e81-ad49-0e313f0c35f8}
One day I’ll create a table of permutations for various Windows versions and execute options.
For now these links need to suffice:
–jeroen
Posted in Batch-Files, Development, Power User, Scripting, Software Development, Windows, Windows 10, Windows 7, Windows 8, Windows 8.1, Windows 9 | 1 Comment »
Posted by jpluimers on 2018/11/23
I needed a “get only the first result” of WHERE (which is present after Windows 2000, so XP, Server 2003 and up), so based on [WayBack] A 90-byte “whereis” program – The Old New Thing I came up with this:
@echo off
:: based on https://blogs.msdn.microsoft.com/oldnewthing/20050120-00/?p=36653
::for %%f in (%1) do @echo.%%~$PATH:f
for %%e in (%PATHEXT%) do @for %%i in (%1 %~n1%%e) do (
@if NOT "%%~$PATH:i"=="" (
echo %%~$PATH:i
goto :eof
)
)
:: note: WHERE lists all occurrences of a file on the PATH in PATH order
goto :eof
Two changes:
References:
–jeroen
Posted in Batch-Files, Development, Power User, Scripting, Software Development, The Old New Thing, Windows, Windows Development | Leave a Comment »
Posted by jpluimers on 2018/11/14
I needed this during logon on Windows machines to set the sound volume: [WayBack] NirCmd – Windows command line tool set-soundvolume-25-percent.bat:
:: requires https://www.nirsoft.net/utils/nircmd.html
:: 100% = 65535
nircmd setsysvolume 16000
Works on all Windows versions (7-10) I tested so far.
Via
There are way sexier ways to do this, but they were all too convoluted for the time I had to get this to work.
For the future:
–jeroen
Posted in Batch-Files, Development, Power User, Scripting, Software Development, Windows | Leave a Comment »
Posted by jpluimers on 2018/11/13
Since ping has a more predictible output over Windows versions than ipconfig, I use this in a batch file:
for /f "delims=[] tokens=2" %%a in ('ping -4 -n 1 %ComputerName% ^| findstr [') do set NetworkIP=%%a
echo Network IP: %NetworkIP%
Source: [WayBack] How do I get the IP address into a batch-file variable? – Stack Overflow
–jeroen
Posted in Batch-Files, Development, Scripting, Software Development | Leave a Comment »
Posted by jpluimers on 2018/10/31
Answering [WayBack] delphi – post-build event with multiple if/copy combinations only execute if first file does not exist – Stack Overflow made me do a quick search for parentheses handling in batch files. TL;DR: it is a mess.
But it reveals some interesting links:
–jeroen
Posted in Batch-Files, Conference Topics, Conferences, Development, Event, Scripting, Software Development, Windows Development | Leave a Comment »
Posted by jpluimers on 2018/10/23
For my archive bc.bat it finds Beyond Compare, then starts it with the given command line parameters. It prefers version 4 over version 3 and user settings over system settings:
:begin
@echo off
setlocal
IF /I %PROCESSOR_ARCHITECTURE% == amd64 goto :x64
IF /I %PROCESSOR_ARCHITEW6432% == amd64 goto :x64
goto :x86
:x64
:: OS is 64bit
set hkcuBaseKey=HKEY_CURRENT_USER\Software\Scooter Software\Beyond Compare
set hklmBaseKey=HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Scooter Software\Beyond Compare
goto :findBC
:x86
:: OS is 32bit
set hkcuBaseKey=HKEY_CURRENT_USER\Software\Scooter Software\Beyond Compare
set hklmBaseKey=HKEY_LOCAL_MACHINE\SOFTWARE\Scooter Software\Beyond Compare
goto :findBC
:findBC
:: https://gist.github.com/rojepp/634908
:: http://stackoverflow.com/questions/5369528/windows-batch-reg-query-key-value-to-a-variable-but-do-not-display-error-if-key
set SupportedBeyondCompareVersions=3, 4
for %%v in (%SupportedBeyondCompareVersions%) do (
for /f "usebackq tokens=2* delims= " %%c in (`reg query "%hkcuBaseKey% %%v" /v ExePath 2^>NUL`) do (
call :do set bcExe="%%d"
)
)
if not [%bcExe%]==[] goto :foundBC
for /f "usebackq tokens=2* delims= " %%c in (`reg query "%hkcuBaseKey%" /v ExePath 2^>NUL`) do (
call :do set bcExe="%%d"
)
if not [%bcExe%]==[] goto :foundBC
for %%v in (%SupportedBeyondCompareVersions%) do (
for /f "usebackq tokens=2* delims= " %%c in (`reg query "%hklmBaseKey% %%v" /v ExePath 2^>NUL`) do (
call :do set bcExe="%%d"
)
)
if not [%bcExe%]==[] goto :foundBC
for /f "usebackq tokens=2* delims= " %%c in (`reg query "%hklmBaseKey%" /v ExePath 2^>NUL`) do (
call :do set bcExe="%%d"
)
:foundBC
if [%bcExe%]==[] ( echo no bc.exe found in registry) else (
echo bcExe=%bcExe%
if exist %bcExe% start "Beyond Compare" %bcExe% %*
if not exist %bcExe% echo not found: [%bcExe%]
)
:exit
endlocal
:end
goto :eof
:do
::echo %*
call %*
goto :eof
–jeroen
Posted in Batch-Files, Beyond Compare, Development, Power User, Scripting, Software Development | Leave a Comment »
Posted by jpluimers on 2018/09/18
From one of my scripts: it will find a 64-bit 7z.exe if it was installed as part of the 7-zip installer, then run it with the parameters provided to the batch file.
setlocal
:verify7zip
:: registry trick from http://www.robvanderwoude.com/files/sortdate2_nt.txt
:: extra trick: tokens=2* allows to get the 3rd (and beyond: space delimited!) value in one variable %%b
for /F "tokens=2*" %%a IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\7-Zip" /v Path64 2^>nul') do set sevenZipDirectoryPath=%%b
call :checkMissingSetting sevenZipDirectoryPath || goto :help
set sevenZipExeFilePath=%sevenZipDirectoryPath%7z.exe
if not exist "%sevenZipExeFilePath%" call :showError "No 7-zip executable at %sevenZipExeFilePath%" || goto :help
:run7zip
"%sevenZipExeFilePath%" %*
endlocal
goto :end
:checkMissingSetting
if not defined %1 call :notifyMissingSetting %1 && exit /b 1
call :showSetting %1
exit /b 0
goto :end
:notifyMissingSetting
echo Registry didn't provide the environment variable "%1"
goto :end
:showError
:: remove double quotes using tilde trick:
echo %~1
:help
echo Syntax: %0 7z.exe-commandline-parameters
goto :end
:end
–jeroen
Posted in 7zip, Batch-Files, Compression, Development, Power User, Scripting, Software Development | Leave a Comment »
Posted by jpluimers on 2018/07/30
I needed all .dproj files in all subdirectories, but only their filenames without any directory names.
With directory names, this is easy:
dir /s /b *.dproj
The answers at [WayBack] windows – How to list all files in directory/subdirectory without path name CMD? – Stack Overflow give the below kind of output.
[WayBack] forfiles embeds all filenames within quotes:
forfiles /m *.dproj /s "Foo.dproj" "Bar.dproj"
A more convoluted [WayBack] for loop gives them without quotes where n stands for name and x for extension including .:
for /r %a in (*.dproj) do @echo %~nxa Foo.dproj Bar.dproj
–jeroen
Posted in Batch-Files, CommandLine, Development, Power User, Scripting, Software Development, Windows | Leave a Comment »
Posted by jpluimers on 2018/06/19
Thanks [WayBack] gbabu for the below PowerShell ide
As PowerShell command:
Get-EventLog System | Where-Object {$_.EventID -eq "1074" -or $_.EventID -eq "6008" -or $_.EventID -eq "1076"} | ft Machinename, TimeWritten, UserName, EventID, Message -AutoSize -Wrap
Based on it and my own experience, thse Event IDs can be interesting:
You can also run this as a batch file, but not you need to escape the pipe | into ^| like this:
PowerShell Get-EventLog System ^| Where-Object {$_.EventID -eq "1074" -or $_.EventID -eq "6008" -or $_.EventID -eq "1076"} ^| ft Machinename, TimeWritten, UserName, EventID, Message -AutoSize -Wrap
If you have PowerShell 3.0 or greater, then you can use the [Archive.is] -In operator:
PowerShell Get-EventLog System ^| Where-Object {$_.EventID -in "41", "109", "1074", "6008", "1076"} ^| ft Machinename, TimeWritten, UserName, EventID, Message -AutoSize -Wrap
–jeroen
Posted in Batch-Files, CommandLine, Development, Power User, PowerShell, PowerShell, Scripting, Software Development, Windows | Leave a Comment »