====== Windows CMD windows ====== * make default window bigger: right click menu on title bar, Defaults > Layout; Screen Buffer size 300x100 ====== basic operation ====== determine the file itself @echo Full path and filename: %~f0 @echo Drive: %~d0 @echo Path: %~p0 @echo Drive and path: %~dp0 @echo Filename without extension: %~n0 @echo Filename with extension: %~nx0 @echo Extension: %~x0 @echo Filename as given on command line: %0 @echo Filename as given on command line minus quotes: %~0 @REM Build from parts @SETLOCAL @SET drv=%~d0 @SET pth=%~p0 @SET fpath=%~dp0 @SET fname=%~n0 @SET ext=%~x0 @echo Simply Constructed name: %fpath%%fname%%ext% @echo Fully Constructed name: %drv%%pth%%fname%%ext% @ENDLOCAL pause **add other exe like python into path of cmd** * note: put added path of python in front of %path% works, while behind it not work * code SET PATH=D:\App\Python;D:\App_Dev\PortableGit\bin;%PATH% **call python file with same name** @echo off call python %~dp0%~n0.py pause **call custom python to run python file with passing parameter (Basic version)** set CustPython=D:\Pipeline\App_Win\Python27x64\ %CustPython%python.exe %~dp0%~n0.py %1 pause import os,sys input_count = len(sys.argv) print('Inputs Count: {0}'.format(input_count)) if input_count>1: print('Passing File Path: {0}'.format(sys.argv[1])) **call custom python to run python file with passing parameter (Advanced version)** :: dont type out cmds in cmd window @echo off set CustPython=R:\Pipeline\App_Win\Python27x64\ :: Check for Python Installation python --version 2>NUL if errorlevel 1 goto NoPython ::====== hasPython ====== call python.exe %~dp0%~n0.py %1 && goto done goto console ::====== noPython ====== :NoPython IF EXIST %CustPython% ( echo %CustPython% call %CustPython%python.exe %~dp0%~n0.py %1 && goto done goto console ) ELSE ( echo Error^: Python not detected ) :console pause :done import os,sys input_count = len(sys.argv) print('Inputs Count: {0}'.format(input_count)) if input_count>1: print('Passing File Path: {0}'.format(sys.argv[1])) sys.exit(0) # 0: success, 1-127: bad error else: print('Error: No File Passing to Python') sys.exit(1) copy file and directory copy d:\file1.txt g:\dir1\file1.txt xcopy d:\download g:\dn /s /e REM "copy without asking, replace by default copy /y d:\file1.txt g:\dir1\file1.txt edit file and directory attribute attrib +r +a +s +h secureFile.txt ===== String and Logic Operation ===== * EQU, NEQ, substring, combine string @echo off REM YourPythonFileName_w.bat will launch without console REM YourPythonFileName.bat will launch with console set file=%~n0 if "%file:~-2%" equ "_w" ( start pythonw %~dp0%file:~0,-2%.py goto done ) call python %~dp0%~n0.py pause :done ===== cmd output direction ===== * the > use as output direction * 1>, and 2> means if the cmd has 2 output vales, and map each output to separate place * stream 1 is the standard input/output stream, 2 is the standard error stream * 2> nul, means mute the 2nd output value. only catch 1st output result ===== start a process ===== * both call and start or direct app.exe can start a process, normally no difference * but if you want to start another batch file, then * CALL will start it in the same window and the called batch has access to the same variable context. * START will create a new cmd.exe for the called batch and without /b it will open a new window. As it's a new context, variables can't be shared. * Starting a new process with CALL, is very similar to running START /wait, in both cases the calling script will (usually) pause until the second script has completed. **Outlook** * create a email with content python version (the main code block) # rough support code for reference config['appPath']['email'] = [r'C:\Program Files\Microsoft Office\Office*\OUTLOOK.EXE'] # main code app = self.getOptionPath(config['appPath'], 'email') # the outlook app path address_list = ['test@test.com'] subject = 'Daily Feedback' text_list = ['line 1', 'line 2'] cmd = '"{0}" /c ipm.note /m "{1}&subject={2}&body={3}"'.format(app, ';'.join(address_list), subject, '\n'.join(text_list)) if os.path.isfile(app): print(cmd) subprocess.Popen(cmd) # support function for reference def getOptionPath(self, dict, name, all=0): # updated: 2019.01.09 if name not in dict.keys(): print('Dict has no key: {0}'.format(name)) return option_list = [] if not isinstance(dict[name], (list,tuple)): option_list = [ dict[name] ] else: option_list = dict[name] if all == 0: found = None for option in option_list: if '*' in option: # wildchar search import glob sub_option_list = glob.glob(option) if len(sub_option_list) > 0: sorted_option_list = sorted(sub_option_list) print('Scaning options:\n'+'\n'.join(sorted_option_list)) found = sorted_option_list[-1] break else: if os.path.exists(option): found = option break if found is not None: found = found.replace('\\','/') print('found: {0}'.format(found)) return found else: all_option = [] for option in option_list: if '*' in option: # wildchar search import glob sub_option_list = glob.glob(option) all_option.extend(sorted(sub_option_list, reverse=1)) else: if os.path.exists(option): all_option.append(option) standard_path_option = [] for each_path in all_option: standard_path = each_path.replace('\\','/') if standard_path not in standard_path_option: standard_path_option.append(standard_path) print(standard_path_option) return standard_path_option * outlook attach file (/c imp.note need or not need?) outlook.exe /c ipm.note /a "FileAttachPathName" /m "email@addresses.com&cc=&subject=&body=" * ref: https://www.slipstick.com/outlook/how-to-use-outlooks-command-line-switches/ ===== system operation ===== * assign a path with driver letter: Subst * ref: https://technet.microsoft.com/en-us/library/bb491006.aspx * export out all system environment variable set > filename.txt * display all or a environment variable value set set path echo %PATH% reg query HKEY_CURRENT_USER\Environment /v path reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v path * cust system var setup * Method 1: in run > SystemPropertiesAdvanced : environment Computer → Properties → Advanced System Settings → Advanced (tab) → Environment Variables // For user variable use path = %PATH%;D:/yourCustomPath path = D:/yourCustomPath path = C:/OtherPath;C:/AnotherOtherPath;D:/yourCustomPath // For system variable use path = C:/OtherPath;C:/AnotherOtherPath;D:/yourCustomPath * Method 2: in command window REM set variable for current session environment (means not working after you close this cmd) set z_sys=D:/z_sys REM set permanent variable for user environment setx z_sys D:/z_sys REM set permanent variable for system environment with admin rights setx /M z_sys D:/z_sys * Method 3.1: into register editor by cmd REM set permanent variable for user environment reg add HKEY_CURRENT_USER\Environment /v z_sys /d "D:/z_sys" /f REM set permanent variable for system environment reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment /v z_sys /d "D:/z_sys" /f * Method 3.2: into register editor by python with Extra Precision update instead of dump system environment value into user environment value # because the path will give both user path and system path, # here is more detail on update only user path content without having system path repeated in user path import sys, subprocess userPathValue=subprocess.check_output("reg query HKCU\Environment /v path") # get original user path value userPath = userPathValue.split('REG_SZ')[-1].strip() # get clean value of the user path myExtraPath = "D:/" os.system('reg add HKCU\Environment /v path /d "'+ userPath + ';' + myExtraPath +'" /f') * Method 4: insert register entry by reg file Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Environment] "Path"="%PATH%;c:\\bin" * get cpu core wmic cpu get NumberOfCores ===== explorer operation ===== * open explorer and select a item in path explorer /select, D:\zTmp\myFileOrFolder ===== file operation ===== * force delete a file del /q /f "\FilePath\file.ext" * rename file rename A.ext B.ext ====== CMD quick actions ====== * clean run cmd list \\ reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU" /va /f >nul 2>nul * cleanup recent file listing \\ del %appdata%\microsoft\windows\recent\automaticdestinations\* del %appdata%\Microsoft\Windows\Recent\* ====== Batch file ====== ===== Batch for registery edit ===== * add \\ regedit add: Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\SomeKey] "SomeStringValue"="Hello" e.g REG ADD HKCR\Control Panel\Desktop /v Wallpaper /t REG_SZ /d "%WINDIR%\Web\Wallpaper\aqua1024.jpg" /f * remove \\ [-HKEY_CURRENT_USER\SomeKey] * empty \\ [HKEY_CURRENT_USER\SomeKey] "SomeStringValue"=- ====== Windows specific command ====== * list all the service net start or sc query type= service * start telnet server net start telnet * list all port netstat -a ===== Dos disk related operation ===== REM "format NTFS drive to FAT32 drive" format /FS:FAT32 /Q X: ===== control panels and admin tools ===== * windows component window can be open with cmds like explorer.exe,control.exe,rundll32.exe, like open network connection window can be * code (canonical name, GUID, module dll) explorer.exe shell:ConnectionsFolder explorer.exe shell:::{992CFFA0-F557-101A-88EC-00DD010CCC48} control.exe netconnections ncpa.cpl control ncpa.cpl rundll32.exe shell32.dll,Control_RunDLL ncpa.cpl control.exe sysdm.cpl,,3 control /name Microsoft.NetworkAndSharingCenter /page Advanced control /name Microsoft.InternetOptions /page 4 explorer shell:::{ED834ED6-4B5A-4bfe-8F11-A626DCB6A921} -Microsoft.Personalization\pageWallpaper # folder option control /name Microsoft.FolderOptions control folders rundll32.exe shell32.dll,Options_RunDLL 0 # folder option - view rundll32.exe shell32.dll,Options_RunDLL 7 * ref: * https://www.lifewire.com/command-line-commands-for-control-panel-applets-2626060 * https://docs.microsoft.com/en-us/windows/win32/shell/controlpanel-canonical-names * https://www.tenforums.com/tutorials/86339-list-commands-open-control-panel-items-windows-10-a.html * https://coderwall.com/p/3awvka/a-list-of-run-commands-for-windows-7 ^ management panel ^^ | services.msc | services panel | | compmgmt.msc | computer manager | | devmgmt.msc | device manager | | fonts | fonts folder | | control | control panel | | control userpasswords2 | user manager | | control date/time | date and time | | control desktop | display property | | control color | appearance theme | ^ control panel ^ control somefile.cpl, ^ |access.cpl |Accessibility controls Keyboard(1), Sound(2), Display(3), Mouse(4), General(5) | |appwiz.cpl |Add/Remove Programs | |desk.cpl |Display properties Themes(5), Desktop(0), Screen Saver(1), Appearance (2), Settings(3)| |hdwwiz.cpl |Add hardware | |inetcpl.cpl |Configure Internet Explorer and Internet properties General(0), Security(1), Privacy(2), Content(3), Connections(4), Programs(5), Advanced(6) | |intl.cpl |Regional settings Regional Options(1), Languages(2), Advanced(3)| |joy.cpl |Game controllers | |main.cpl |Mouse properties and settings Buttons(0), Pointers(1), Pointer Options(2), Wheel(3), Hardware(4)| |main.cpl,@1 |Keyboard properties Speed(0), Hardware (1)| |mmsys.cpl |Sounds and Audio Volume(0), Sounds(1), Audio(2), Voice(3), Hardware(4)| |ncpa.cpl |Network properties | |nusrmgr.cpl |User accounts | |powercfg.cpl |Power configuration Power Schemes, Advanced, Hibernate, UPS (Tabs not indexed)| |sysdm.cpl |System properties General(0), Computer Name(1), Hardware(2), Advanced(3), System Restore(4), Automatic Updates(5), Remote (6)| |telephon.cpl |Phone and modem options Dialing Rules(0), Modems(1), Advanced(2) | |timedate.cpl |Date and time properties Date & Time(0), Time Zone(1), Internet Time (no index)| ===== Windows 3rd party command-line utility ===== ** NirCmd ** ^ download | http://www.nirsoft.net/utils/nircmd.html | ^ set default sound device | nircmd.exe setdefaultsounddevice “Speakers_TheNameInPanel” | ^ close folder windows | nircmd.exe win close class "CabinetWClass" | ^ close empty cmd windows | nircmd.exe win close title "C:\Windows\system32\cmd.exe" | ^ off monitor | nircmd.exe monitor off | ^ off computer | nircmd.exe exitwin poweroff force | ^ pop dialog | nircmd.exe trayballoon "Hello" "This is a test..." "shell32.dll,22" 15000 | ^ windows control | http://nircmd.nirsoft.net/win.html | ** MS sysinternal suite ** * http://technet.microsoft.com/en-us/sysinternals/bb545027 ===== PowerShell ===== * enable script run on powershell * run powershell as admin, then set-executionpolicy remotesigned * add ssh # Install the OpenSSH Client Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0 # Install the OpenSSH Server Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 * after install ssh, go Run services, and set ssh server to startup automatic, then start ssh server * you need put vim on server machine to be able to edit text file: * https://www.vim.org/download.php