跳至主要内容

windows 之 bat(批处理)

一个免费的开发人员工具,使程序员可以将批处理文件转换为可执行代码。该程序专为Windows设计,提供了多种功能,可轻松转换和加密文件,从而使最终产品始终安全
轻松将任何批处理文件转换为可执行文件

下载并安装7-Zip_SFX_Maker_v3.3,将脚本MakeExeFromBat和7za465压缩包解压后覆盖到安装目录下

脚本MakeExeFromBat.bat中需要添加
SET PathTo7Zip=C:\7-Zip SFX Maker
SET InstallPath="%TEMP%"

最后运行
C:\7-Zip SFX Maker>"C:\7-Zip SFX Maker\MakeExeFromBat.bat" checkOSBit.bat
在当前文件夹中产生checkOSBit.exe文件



%CD%:可用于获取当前目录
%DATE%:可用于获取日期
%TIME%:可用于获取时间
%RANDOM%:可以用来获得0和32767之间的随机数
%ERRORLEVEL%:可用于获取错误级别值
%CMDEXTVERSION%:获取当前的命令处理器扩展
%CMDCMDLINE%:获取调用命令提示符的命令行可执行文件。
%HIGHESTNUMANODENUMBER%:获取此计算机上的最高numa节点号



cmd中直接输入help获取所有命令
help dir 相当于 dir /?
exit /b 与 goto :eof

echo y|choice 则errorlevel=1 
echo n|choice 则errorlevel=2 

type /?
显示文本文件的内容

cipher cipher free space overwrite
ipconfig ipconfig /all ipconfig /flushdns
ping tracert
fc (file compare)
sfc sfc /scannow 
DISM /Online /Cleanup-Image /RestoreHealth
chkdsk (check disk)
tasklist taskkill /f /t /
powercfg powercfg /energy  powercfg /batteryreport
netsh wlan show wlanreport

部署映像服务和管理工具
To Check Health: DISM /Online /Cleanup-Image /CheckHealth To Check it more in depth and takes longer: DISM /Online /Cleanup-Image /ScanHealth And to repair: DISM /Online /Cleanup-Image /RestoreHealth

四个开机启动位置(可通过msconfig打开系统配置启动项查看)

shell:startup
C:\Users\DZL\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

shell:common startup
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run

dir c:\ /ad /x
提供目录列表并提供它们的“短名称”
 PROGRA~1     Program Files
 PROGRA~2     Program Files (x86)
 PROGRA~3     ProgramData

c:\>set|findstr /i /r ".*program.*="
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)
ProgramW6432=C:\Program Files

c:\>set | findstr /R "^Common"
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files

c:\>set | findstr /R "^Program"
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)
ProgramW6432=C:\Program Files

Windows – Short Name Issues with Progra~1 and Progra~2



转义符(Escape Characters) ^


E:\DZL>cipher /?
显示或更改 NTFS 分区上目录 [文件] 的加密。

创建一个安全的文件夹
隐藏
E:\>attrib +h +s +r myfolder
显示
E:\>attrib -h -s -r myfolder

attrib /?

C:\Users\DANG\Desktop>prompt /?
更改 cmd.exe 命令提示符。

pushd "%~dp0" 切换脚本所在路径为当前工作目录
@echo off
pushd "%~dp0"
echo %CD%
pause
popd
echo %CD%
pause

 net session 可以判断当前cmd是否以管理员身份打开

c:\>net session
列表是空的。

my.bat
goto :main

rem 评论即remarks and records coments
rem 定义函数参数
:say_something
echo I am saying %~1 and %~2 !
goto :eof

:main
echo This is the main function!
rem 调用函数参数
call :say_something hello word

goto :eof


:: ===================================================================================
:: windows下bat批处理中%cd%和%~dp0的区别
:: 1. %cd% 可以用在批处理文件中,也可以用在命令行中;
:: 展开后,是驱动器盘符:+当前目录,如在dos窗口中进入c:\dir目录下面,
:: 输入:echo %cd% ,则显示为:c:\dir 。
:: %cd%的内容是可以被改变的,其内容为命令的执行路径或批处理文件的执行路径。
::
:: 2.%~dp0只可以用在批处理文件中,它是由它所在的批处理文件的目录位置决定的,是批处理
:: 文件所在的盘符:+路径。在执行这个批处理文件的过程中,它展开后的内容是不可以改变的。
::
:: cd /d %~dp0的意思就是cd /d d:\test
:: %0代表批处理本身 d:\test\a.bat
:: ~dp是变量扩充
:: d既是扩充到分区号 d:
:: p就是扩充到路径 \test
:: dp就是扩充到分区号路径 d:\test
 
:: 扩充变量语法详解:
:: 选项语法:
:: ~I - 删除任何引号("),扩充 %I
:: %~fI - 将 %I 扩充到一个完全合格的路径名
:: %~dI - 仅将 %I 扩充到一个驱动器号
:: %~pI - 仅将 %I 扩充到一个路径
:: %~nI - 仅将 %I 扩充到一个文件名
:: %~xI - 仅将 %I 扩充到一个文件扩展名
:: %~sI - 扩充的路径只含有短名
:: %~aI - 将 %I 扩充到文件的文件属性
:: %~tI - 将 %I 扩充到文件的日期/时间
:: %~zI - 将 %I 扩充到文件的大小
:: %~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩充
:: 到找到的第一个完全合格的名称。如果环境变量名
:: 未被定义,或者没有找到文件,此组合键会扩充到
:: 空字符串
:: 可以组合修饰符来得到多重结果:
:: %~dpI - 仅将 %I 扩充到一个驱动器号和路径
:: %~nxI - 仅将 %I 扩充到一个文件名和扩展名
:: %~fsI - 仅将 %I 扩充到一个带有短名的完整路径名
:: %~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充
:: 到找到的第一个驱动器号和路径。
:: %~ftzaI - 将 %I 扩充到类似输出线路的 DIR 
:: ====================================================================================
@echo off
echo This is command %%cd%%  Result:%cd%
@echo ===============================================
echo This is command %%~dp0  Result:%~dp0
@echo ===============================================
:: 切换到脚本所在的目录
set WORK_DIR=%~dp0
echo Switch to %WORK_DIR%
cd /d %WORK_DIR%
echo %cd%
@echo ===============================================
pause

更改与批处理文件的“编辑”相关联的程序:

1、运行RegEdit(以管理员身份)
2、导航至HKEY_CLASSES_ROOT\batfile\shell\edit\command
3、修改默认值并将值数据从%SystemRoot%\System32\NOTEPAD.EXE %1更改为 "C:\Program Files (x86)\Notepad++\notepad++.exe" "%1"
4、关闭RegEdit
5、右键单击->“编辑”现在应在NotePad ++中打开批处理文件




介绍%~数值



批处理文件会忽略命令行中的某些字符,具体取决于DOS版本,是否被“转义”,并且通常取决于它们在命令行中的位置-

逗号(“,”)被空格替换,除非它们是双引号中字符串的一部分。

分号(“;”)用空格代替,除非它们是双引号中字符串的一部分。

有时会将“=”字符替换为空格,如果它们是双引号中的字符串的一部分,则不会用空格代替。

仅当第一个正斜杠(“/”)紧跟该命令时才由空格代替,但不带前导空格。

多个空格将替换为单个空格,除非它们是双引号中字符串的一部分。

制表符将替换为一个空格。

第一个命令行参数之前的前导空格将被忽略。

删除最后一个命令行参数后的尾部空格。


卸载并删除软件安装目录
@echo off
set x86UNINS=HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{A52FDE51-B187-437B-8FBC-486D41D92A98}_is1
set x64UNINS=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{A52FDE51-B187-437B-8FBC-486D41D92A98}_is1

set INS="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\sajt.exe"


for /f "tokens=1,2,*" %%i in ('REG query %INS% /v "PATH"') do set "APP_PATH=%%k"
echo 软件安装路径为%APP_PATH%


START /wait taskkill /f /im sajt.exe /t

:: Detecting OS processor type

if "%PROCESSOR_ARCHITECTURE%"=="AMD64" goto 64BIT
echo ---------------32-bit OS---------------

for /f "tokens=1,2,*" %%i in ('REG query "%x64UNINS%" /v "QuietUninstallString"') do set "x64uninstall=%%k"
echo 软件静默卸载路径为%x64uninstall%
cmd /c call %x64uninstall% /N /Y

goto END


:64BIT
echo ---------------64-bit OS---------------

for /f "tokens=1,2,*" %%i in ('REG query "%x86UNINS%" /v "QuietUninstallString"') do set "x86uninstall=%%k"
echo 软件静默卸载路径为%x86uninstall%

cmd /c call %x86uninstall% /N /Y
goto END

:END
echo ---------开始删除安装目录文件夹---------
rd /s /q "%APP_PATH%"

在线GUID / UUID生成器

GUID(aka UUID)是“全局唯一标识符”(或“ Universally Unique Identifier”)的首字母缩写。它是用于标识资源的128位整数。GUID术语通常由使用Microsoft技术的开发人员使用,而UUID则在其他任何地方使用。

https://ss64.com/nt/for_f.html
https://superuser.com/questions/234104/uninstalling-programs-silently-via-cmd/234107

@echo off
set x86GUID=HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{A52FDE51-B187-437B-8FBC-486D41D92A98}_is1
set x64GUID=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

for /f "tokens=1,2,*" %%i in ('REG query "%x86GUID%" /v QuietUninstallString') do set file_uninstall_path=%%k
echo %file_uninstall_path%
cmd /c call %file_uninstall_path%

pause



批处理文件以检查64位或32位操作系统



@echo OFF

reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /i "x86" > NUL && set OS=32BIT || set OS=64BIT

if %OS%==32BIT echo This is a 32bit operating system
if %OS%==64BIT echo This is a 64bit operating system


:Check_Architecture
if /i "%processor_architecture%"=="x86" (
    IF NOT DEFINED PROCESSOR_ARCHITEW6432 (
        REM Run 32 bit command

    ) ELSE (
        REM Run 64 bit command
    )           
) else (
        REM Run 64 bit command
)

@echo off
echo Detecting OS processor type

if "%PROCESSOR_ARCHITECTURE%"=="AMD64" goto 64BIT
echo 32-bit OS

goto END
:64BIT
echo 64-bit OS

:END


@echo off

Set RegQry=HKLM\Hardware\Description\System\CentralProcessor\0

REG.exe Query %RegQry% > checkOS.txt

Find /i "x86" < CheckOS.txt > StringCheck.txt

If %ERRORLEVEL% == 0 (
    Echo "This is 32 Bit Operating system"
) ELSE (
    Echo "This is 64 Bit Operating System"
)


强大。简单易学。 Windows的终极自动化脚本语言

AutoIt v3是一种免费的,类似于BASIC的脚本语言,旨在自动执行Windows GUI和常规脚本。它结合了模拟按键,鼠标移动和窗口/控件操作的组合,从而以其他语言(例如VBScript和SendKeys)不可能或不可靠的方式自动执行任务。AutoIt也非常小巧,功能齐全,可以直接在所有版本的Windows上运行,而无需烦人的“运行时”

测量运行脚本块和cmdlet所花费的时间


Ls:Windows等效目录是dir。“ Dir”有很多开关,可以根据不同的属性列出文件,按大小或修改日期对列表进行排序等。
Grep:Findstr是与grep相匹配的。 find也用于搜索文件中的字符串,但是没有很多选项。
Adduser:我们可以使用 net user  来管理用户帐户。
Useradd:net localgroup可用于管理用户组。网络组可用于管理活动目录(域)组。
Uname:ver命令显示Windows操作系统版本。 Systeminfo显示了很多硬件和软件信息。
Ps:最匹配的命令是tasklist,尽管功能不如ps。
Echo : echo,与Linux的回声非常相似。
md:mkdir
rm:Del删除文件,而rmdir可用于删除目录。
Du:du可用于监视磁盘使用情况。但是,此工具不是Windows操作系统的一部分。我们需要单独安装。有关更多信息,请参见链接。
Df:Net use。我们可以列出计算机上映射的网络共享。
Mount :    Net use。将网络共享映射到本地驱动器
Cat:在控制台/命令提示符下键入print文本文件的内容。
Head:我知道没有等效的命令。
Tail   :   Tail资源工具包工具。
touch:Fsutil可用于创建所需大小的文件。

参考资料

https://www.makeuseof.com/tag/write-simple-batch-bat-file/

https://www.tutorialspoint.com/batch_script/batch_script_quick_guide.htm

https://www.windowscentral.com/how-create-and-run-batch-file-windows-10

https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-xp/bb490890(v=technet.10)

基本Windows CMD命令
https://www.makeuseof.com/tag/essential-windows-cmd-commands/

Windows命令行入门指南
https://www.makeuseof.com/tag/a-beginners-guide-to-the-windows-command-line/







        如果“运行”应用程序尚未放置在“开始”菜单中,则可以通过右键单击“开始”菜单并选择“属性”将其放置在此处。在“属性”窗口中,导航到“开始菜单”选项卡,然后单击“自定义...”按钮。几乎在该列表的底部,您可以选择将“运行”放置在开始菜单上

cmd中运行
systeminfo | findstr /C:"初始安装时间"    #获取初始安装时间
wmic desktopmonitor get screenheight, screenwidth   #获取屏幕分辨率
wmic os get serialnumber    #查找Windows序列号
wmic bios get serialnumber     #获取BIOS序列号

#获取BIOS
reg query HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS

#计算机品牌和型号
wmic csproduct get vendor, version
wmic computersystem get model,name,manufacturer,systemtype

#列出本地驱动器
wmic logicaldisk get description,name | findstr /C:"Local"
fsutil fsinfo drives


net user  username | findstr /B /C:"Last logon"  
net user administrator | findstr /B /C:"上次登录"     #查找上次登录时间
quser administrator     #显示有关登录到该系统的用户的信息
net user %username%  #显示当前登录用户信息   %username%当前登录用户的登录名
whoami   #dzl-pc\dzl


forfiles /M *.jpg /C "cmd /c rename @file @fname\" - post.jpg\"" #批量修改文件
forfiles /M *.jpg /C "cmd /c rename @file ????.*"
forfiles /M *.txt /C "cmd /c if @isdir==FALSE notepad.exe @file" #批量打开文件
forfiles /M *.exe /c "cmd /c Del @file \" /d -30\"" #批量删除文件

more命令

more /C data.txt       #清除当前屏幕文本,然后打印文件data.txt的内容
more +n filename      #从第n + 1行读取文件,而不是从第一行读取文件
dir | more
按“ q”退出命令

TASKLIST命令

查看正在运行的进程列表
在批处理脚本中,TASKLIST命令可用于获取系统中当前正在运行的进程的列表。
TASKLIST [/S system [/U username [/P [password]]]]
         [/M [module] | /SVC | /V] [/FI filter] [/FO format] [/NH]
描述:
    该工具显示在本地或远程机器上当前运行的进程列表。
示例:
    TASKLIST
    TASKLIST /M
    TASKLIST /V /FO CSV
    TASKLIST /SVC /FO LIST
    TASKLIST /M wbem*
    TASKLIST /S system /FO LIST
    TASKLIST /S system /U domain\username /FO CSV /NH
    TASKLIST /S system /U username /P password /FO TABLE /NH
    TASKLIST /FI "USERNAME ne NT AUTHORITY\SYSTEM" /FI "STATUS eq running"

tasklist > process.txt
上面的命令获取tasklist显示的输出,并将其保存到process.txt文件中。

tasklist /fi "memusage gt 40000"
上面的命令只会获取内存大于40MB的那些进程。以下是可以呈现的示例输出。

tasklist /fi "username eq userName"       #查找指定用户启动的进程列表
tasklist /fi "pid eq processId"       #查找特定进程的内存使用情况
tasklist /fi "status eq not responding"    #查找未响应进程的列表
tasklist /svc /fi "pid eq 212"         #获取进程中运行的服务列表
tasklist /fi "services eq webclient"         #查找运行特定服务的进程
tasklist /fi "imagename eq firefox.exe"    #查找运行指定映像名称的进程
tasklist /fi "cputime gt 01:20:00"        #获取超过一定运行时间的进程列表

tasklist /fi "memusage gt 6000" /fi "memusage lt 7000"
获取内存空间在一定范围值内的进程列表,内存大小应以KB为单位指定


TASKKILL命令

杀死一个特定的进程
TASKKILL [/S system [/U username [/P [password]]]]
         { [/FI filter] [/PID processid | /IM imagename] } [/T] [/F]
描述:
    使用该工具按照进程 ID (PID) 或映像名称终止任务。
示例:
TASKKILL /IM notepad.exe
    TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
    TASKKILL /F /IM cmd.exe /T 
    TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"
    TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe
    TASKKILL /S system /U domain\username /FI "USERNAME ne NT*" /IM *
    TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*"
taskkill /f /im notepad.exe
上面的命令将杀死打开的记事本任务(如果已打开)。

taskill /pid 9214
上面的命令将杀死一个进程为9214的进程。


Taskkill /t /f /im “your cmd file name”
/t terminate all process including sub-ones
/f with force
/im with image name

使用映像名称终止
taskkill /f /im SumatraPDF.exe /im notepad.exe

taskkill /fi "USERNAME eq DZL" /im notepad.exe /im idman.exe > nul

taskkill /F /IM explorer.exe
上面的命令将使所有GUI窗口消失。您可以通过从cmd运行“ explorer”来重启资源管理器

使用映像名称终止时,它将终止所有进程,因此将关闭所有文件。要终止特定文件的Word会话,请使用进程ID

使用进程ID终止进程
taskkill /PID processId       #taskkill /PID 1234

杀死消耗大量内存的进程
taskkill /FI "memusage gt value"      #taskkill /FI "memusage gt 102400"


start 命令

开始一个新的进程
DOS脚本还可以完全启动一个新进程。这可以通过使用START命令来实现。
启动一个单独的窗口运行指定的程序或命令。

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
      [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
      [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
      [command/program] [parameters]

    "title"     在窗口标题栏中显示的标题。
    path        启动目录。
    B           启动应用程序,但不创建新窗口。应用程序已忽略 ^C 处理。
                除非应用程序启用 ^C 处理,否则 ^Break 是唯一可以中断
                该应用程序的方式。
    I           新的环境将是传递给 cmd.exe 的原始环境,而不是当前环境。                
    MIN         以最小化方式启动窗口。
    MAX         以最大化方式启动窗口
START "Test Batch Script" /Min test.bat
上面的命令将在新窗口中运行批处理脚本test.bat。窗口将以最小化模式启动,并且标题为“Test Batch Script”。

START "" "C:\Program Files\Microsoft Office\Winword.exe" "D:\test\TESTA.txt"
上面的命令实际上将在另一个进程中运行Microsoft Word,然后在MS Word中打开文件TESTA.txt

start .   #在当前目录中打开Windows资源管理器

#以最小化窗口形式启动批处理文件
start /min myfile.bat ^& exit  

#如果批处理文件未以exit命令结尾,则关闭批处理文件后,它将使MS-DOS命令提示符窗口保持打开状态。或者,您可以使用以下命令来启动批处理文件并退出该窗口
start /min myfile.bat ^& exit

cmd.exe /c start /min myfile.bat ^& exit  #计划任务中运行

start notepad && calc   #使用“ &&”告诉Windows启动多个文件

start iexplore    #启动Internet Explorer
start dir    #在另一个命令窗口中运行命令不关闭
start cmd /c dir   
Start cmd /c  C:\mybatchfile.bat  #在另一个命令窗口中运行批处理文件并在批处理文件执行完成后关闭该窗口
start /b dir   #当前命令窗口中运行命令

start“” [网站]:将使用默认的网络浏览器转到您选择的网站。

@echo off 
start "" http://www.baidu.com
start "" http://www.abc.com

start "MyWindow" cmd /c "ping localhost & ipconfig & pause"

对文件执行的一些操作


创建文件
使用重定向命令创建文件
@echo off
echo "Hello">C:\new.txt
如果文件new.txt在C:\中不存在,则将在上述命令的帮助下创建该文件

写入文件
@echo off
dir C:\>C:\new.txt
上面的代码片段首先使用DIR命令来获取整个C:\的目录列表。然后,它将获取该输出,并在重定向命令的帮助下将其发送到文件new.txt。

追加到文件
@echo off
echo "This is the directory listing of C:\Drive">C:\new.txt
dir C:\>>C:\new.txt
在上面的示例中,您可以看到第一个echo命令用于使用单重定向命令创建文件,而DIR命令使用双重定向命令输出到文件


从文件读取
通过使用FOR循环命令遍历需要读取的文件中定义的每一行,可以完成批处理脚本中文件的读取
@echo off
FOR /F "tokens=* delims=" %%x in (new.txt) DO echo %%x
delims参数用于将文件中的文本分解为不同的标记或单词。然后将每个单词或标记存储在变量x中。对于从文件中读取的每个单词,将执行回显以将单词打印到控制台输出。


删除文件
DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names
del test.bat
上面的命令将删除当前目录中的文件test.bat(如果存在)。

del c:\test.bat
上面的命令将删除当前目录中的文件C:\test.bat(如果存在)。

del c:\*.bat
*(星号)是通配符。* .bat表示您要删除c:\目录中的所有bat文件。

del c:\?est.tmp
这 ?(问号)是一个字母的单个通配符。在上面的示例中使用此命令将删除所有以“ est.tmp”结尾的文件,例如pest.tmp或test.tmp。


重命名文件
对于重命名文件,批处理脚本提供了REN或RENAME命令
RENAME [drive:][path][directoryname1 | filename1] [directoryname2 | filename2]

rename *.txt *.bak
上面的命令会将所有文本文件重命名为扩展名为.bak的文件。

rename "TESTA.txt" "TESTB.txt"
上面的命令会将文件TESTA.txt重命名为TESTB.txt。


移动文件
MOVE [/Y | /-Y] [drive:][path]filename1[,...] destination
move c:\windows\temp\*.* c:\temp
上面的命令会将c:\windows\temp文件移动到root用户的temp目录中。

move new.txt, test.txt c:\example
上面的命令会将文件new.txt和test.txt移动到c:\example文件夹中。

对文件夹执行的一些操作


创建文件夹
MKDIR [drive:]path 
MD [drive:]path

md test
上面的命令将在当前目录中创建一个名为test的目录。

md C:\test
上面的命令将在C驱动器中创建一个名为test的目录。

md “Test A”
如果文件夹名称中有空格,则文件夹名称应用引号引起来。

mkdir \a\b\c
上面的命令以递归方式创建目录,与发出以下命令集相同。

mkdir \a 
chdir \a 
mkdir b 
chdir b 
mkdir c


列出文件夹内容
DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]
  [/O[[:]sortorder]] [/P] [/Q] [/R] [/S] [/T[[:]timefield]] [/W] [/X] [/4]

dir *.exe
上面的命令列出了所有以.exe文件扩展名结尾的文件。

dir *.txt *.doc
上面的命令使用多个文件规范在一个命令中列出以.txt和.doc结尾的所有文件。

dir /ad
仅列出当前目录中的目录。如果需要进入列出的目录之一,请使用cd命令。

dir /s
列出您所在目录中的文件以及该目录之后的所有子目录。如果您位于根目录“ C:\>”,请键入此命令,它将向您列出计算机C:驱动器上的每个文件和目录。

dir /p
如果目录中有很多文件,并且您无法在滚动时读取所有文件,则可以使用上述命令,并且一次将所有文件显示一页。

dir /w
如果不需要文件信息,则可以使用上面的命令仅列出水平排列的文件和目录,所需空间尽可能少。

dir /s /w /p
上面的命令将以宽格式一次列出一页当前目录和子目录中的所有文件和目录。

dir /b /s | sort
获取所有文件路径

dir c:\ /ad /x
提供目录列表并提供它们的“短名称”


删除文件夹
DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names

del Example
上面的命令将删除当前工作目录中名为Example的文件夹。

del C:\Example
上面的命令将删除C驱动器中名为Example的文件夹。

Del Example1 , Example2
上面的命令将删除当前工作目录中名为Example1和Example2的文件夹。


重命名文件夹
RENAME [drive:][path][directoryname1 | filename1] [directoryname2 | filename2]

ren Example Example1
上面的命令会将当前工作目录中名为Example的文件夹重命名为Example1。

ren C:\Example Example1
上面的命令会将C驱动器中名为Example的文件夹重命名为Example1。


移动文件夹
MOVE [/Y | /-Y] [drive:][path]filename1[,...] destination

move *.* C:\Example
上面的命令会将所有文件从当前目录移动到文件夹C:\Example。

move *.txt C:\Example
上面的命令会将所有带有txt扩展名的文件从当前目录移动到文件夹C:\Example。

move C:\old\*.* C:\Example
上面的命令会将所有文件从C驱动器中名为“ old”的文件夹移至文件夹C:\xample。

move filename destinationFolder      #将文件移到另一个目录
move  data.docx  d:\backup\folder\      #将文件 data.docx移动到文件夹 d:\ backup \ folder
move data.docx  d:\backup\folder\newData.docx     #将文件移动到新位置时重命名文件

我们无法使用单个命令移动多个文件,但是,我们可以使用通配符来批量移动文件。例如
move *.txt  destinationDirectory     #将所有文本文件从当前文件夹移动到新位置
move A*  destinationDirectory        #移动所有以字母“ A”开头的文件

要移动文件夹用xcopy

重命名仅更改文件名,它不会将文件从一种类型转换为另一种类型
rename  d:\data\file1.doc file2.doc
请注意,您不能为目标文件指定新的驱动器或路径。

timeout超时参数

可以使用两个命令(timeout ,sleep(仅限XP))使批处理命令休眠一段时间
timeout /T 10
timeout /T 20 /nobreak

sleep no_of_seconds_to_wait    #等待多少、秒
sleep -m no_of_milli_seconds_to_wait   #等待多少毫秒

cmd颜色设置

color /?
设置默认的控制台前景和背景颜色

将cmd创建快捷方式到桌面,然后右键属性中修改颜色


HKEY_CURRENT_USER\Software\Microsoft\Command Processor修改DefaultColor值,默认0,改为1f

COLOR [attr]
  attr        指定控制台输出的颜色属性

颜色属性由两个十六进制数字指定 -- 第一个为背景,第二个则为前景。每个数字可以为以下任何值之一:
    0 = 黑色       8 = 灰色
    1 = 蓝色       9 = 淡蓝色
    2 = 绿色       A = 淡绿色
    3 = 浅绿色     B = 淡浅绿色
    4 = 红色       C = 淡红色
    5 = 紫色       D = 淡紫色
    6 = 黄色       E = 淡黄色
    7 = 白色       F = 亮白色

默认值07,尽管很多人似乎都喜欢0f、02或0A

CoColor更改了后续控制台输出的控制台颜色,而不是像内置的 COLOR 命令那样更改整个窗口


管理家庭网络并进行故障排除




从注册表中删除一个子项或条目
如果注册表项名称包含空格,请用引号引起来

reg delete <Registry_keyname_path> [{/v Valuename | /ve | /va}] [/f]

<Registry_keyname_path>  指定要添加的子项或条目的完整路径。所指定的远程计算机,包括计算机名(格式\\<computername>\)作为的一部分键名。省略\\<computername>\会导致该操作默认为本地计算机。该键名必须包括一个有效的根键。本地计算机的有效根密钥为:HKLM,HKCU,HKCR,HKU和HKCC。如果指定了远程计算机,则有效的根密钥为:HKLM和HKU。如果注册表项名称包含空格,请用引号引起来。
/ v <Valuename> 删除子项下的特定条目。如果未指定任何条目,则子项下的所有条目和子项将被删除。
/ ve 指定仅删除没有值的条目。
/ va 删除指定子项下的所有条目。指定的子项下的子项不会被删除。
/f 在不要求确认的情况下删除现有的注册表子项或条目。
/? 在命令提示符下显示帮助

reg delete /?


::修改eInvoiceAuto自动上传程序类型(1-航天,2-百旺票字版,3-百旺税字版)
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\sajt.exe" /v KPTYPE /t REG_SZ /d 2 /f
::全部查找
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\sajt.exe"
::精确查找
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\fwkp.exe" /v orgcode



通过REG QUERY命令从注册表中读取。此命令可用于从注册表中检索任何键的值
REG QUERY [ROOT\]RegKey /v ValueName [/s] 
REG QUERY [ROOT\]RegKey /ve --This returns the (default) value
其中RegKey是需要在注册表中搜索的键

示例:

  REG QUERY HKLM\Software\Microsoft\ResKit /v Version
    显示注册表值版本的值

  REG QUERY \\ABC\HKLM\Software\Microsoft\ResKit\Nt\Setup /s
    显示远程机器 ABC 上的、在注册表项设置下的所有子项和值

  REG QUERY HKLM\Software\Microsoft\ResKit\Nt\Setup /se #
    用 "#" 作为分隔符,显示类型为 REG_MULTI_SZ 的所有值名称的所有
    子项和值。

  REG QUERY HKLM /f SYSTEM /t REG_SZ /c /e
    以区分大小写的形式显示项、值和数据和数据类型 REG_SZ
    的、在 HKLM 更目录下的、"SYSTEM" 出现的精确次数

  REG QUERY HKCU /f 0F /d /t REG_BINARY
    显示在 HKCU 根目录下、数据类型为 REG_BINARY 的数据的项、值和
    数据的 "0F" 出现的次数。

  REG QUERY HKLM\SOFTWARE /ve 
    显示在 HKLM\SOFTWARE 下的项、值和数据(默认)

@echo off 
REG QUERY HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows\
上面的命令将在注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows\下查询所有项及其各自的值



通过REG ADD命令完成添加到注册表。请注意,为了向注册表添加值,您需要在系统上具有足够的特权才能执行此操作。
REG ADD [ROOT\]RegKey /v ValueName [/t DataType] [/S Separator] [/d Data] [/f]
REG ADD [ROOT\]RegKey /ve [/d Data] [/f]

例如:

  REG ADD \\ABC\HKLM\Software\MyCo
    添加远程机器 ABC 上的一个注册表项 HKLM\Software\MyCo

  REG ADD HKLM\Software\MyCo /v Data /t REG_BINARY /d fe340ead
    添加一个值(名称: Data,类型: REG_BINARY,数据: fe340ead)

  REG ADD HKLM\Software\MyCo /v MRU /t REG_MULTI_SZ /d fax\0mail
    添加一个值(名称: MRU,类型: REG_MUTLI_SZ,数据: fax\0mail\0\0)

  REG ADD HKLM\Software\MyCo /v Path /t REG_EXPAND_SZ /d ^%systemroot^%
    添加一个值(名称: Path,类型: REG_EXPAND_SZ,数据: %systemroot%)
    注意: 在扩充字符串中使用插入符号 ( ^ )
@echo off 
REG ADD HKEY_CURRENT_USER\Console /v Test /d "Test Data" 
REG QUERY HKEY_CURRENT_USER\Console /v Test
在上面的示例中,第一部分是将注册表项添加到注册表中HKEY_CURRENT_USER\Console下的位置。该键的名称为Test,并且分配给该键的值为Test Data,其类型为默认字符串。
第二个命令仅显示使用REG QUERY命令添加到注册表中的内容


通过REG DEL命令从注册表中删除。
请注意,为了从注册表中删除值,您需要在系统上具有足够的特权才能执行此操作。
REG DELETE KeyName [/v ValueName | /ve | /va] [/f]

  KeyName    [\\Machine\]FullKey
    Machine  远程机器名 - 忽略当前机器的默认值。
             远程机器上只有 HKLM 和 HKU。
    FullKey  ROOTKEY\SubKey
    ROOTKEY  [ HKLM | HKCU | HKCR | HKU | HKCC ]
    SubKey   所选 ROOTKEY 下的注册表项的全名。
  ValueName  所选项下的要删除的值的名称。
             省略时,该项下的所有子项和值都会被删除。

  /ve        删除空白值名称的值(默认)。

  /va        删除该项下的所有值。

  /f         不用提示就强行删除。

例如:

  REG DELETE HKLM\Software\MyCo\MyApp\Timeout
    删除注册表项 Timeout 及其所有子项和值

  REG DELETE \\ZODIAC\HKLM\Software\MyCo /v MTU
    删除 ZODIAC 上 MyCo 下的注册表项 MTU
@echo off
REG DELETE HKEY_CURRENT_USER\Console /v Test /f
REG QUERY HKEY_CURRENT_USER\Console /v Test
在上面的示例中,第一部分是将注册表项HKEY_CURRENT_USER\Console下的注册表项删除。此项的名称为Test。
第二个命令仅显示使用REG QUERY命令删除到注册表的内容。从此命令中,我们应该预期会出现错误,只是为了确保实际上已删除了我们的密钥。



从注册表中复制是通过REG COPY命令完成的。
请注意,为了从注册表中复制值,您需要在系统上具有足够的特权才能在源位置和目标位置上都执行此操作
REG COPY KeyName1 KeyName2 [/s] [/f]

  KeyName    [\\Machine\]FullKey
    Machine  远程机器名 - 忽略当前机器的默认值。
             远程机器上只有 HKLM 和 HKU。
    FullKey  ROOTKEY\SubKey
    ROOTKEY  [ HKLM | HKCU | HKCR | HKU | HKCC ]
    SubKey   所选 ROOTKEY 下的注册表项的全名。
  /s         复制所有子项和值。

  /f         不用提示就强行复制。

例如:

  REG COPY HKLM\Software\MyCo\MyApp HKLM\Software\MyCo\SaveMyApp /s
    将注册表项 MyApp 下的所有子项和值复制到注册表项 SaveMyApp


  REG COPY \\ZODIAC\HKLM\Software\MyCo HKLM\Software\MyCo1
    将 ZODIAC 上注册表项 MyCo 下的所有值复制到当前机器上的
    注册表项 MyCo1

@echo off 
REG COPY HKEY_CURRENT_USER\Console HKEY_CURRENT_USER\Console\Test 
REG QUERY HKEY_CURRENT_USER\Console\Test
在上面的示例中,第一部分是将内容从位置HKEY_CURRENT_USER\Console复制到同一台计算机上的位置HKEY_CURRENT_USER\Console\Test。
第二个命令用于查询新位置,以检查是否正确复制了所有值。


比较注册表项是通过REG COMPARE命令完成的。
REG COMPARE KeyName1 KeyName2 [/v ValueName | /ve] [Output] [/s]

  KeyName    [\\Machine\]FullKey
    Machine  远程机器名 - 省略当前机器的默认值。
             远程机器上只有 HKLM 和 HKU。
    FullKey  ROOTKEY\SubKey
             如果没有指定 FullKey2,FullKey2 则跟 FullKey1 相同。
    ROOTKEY  [ HKLM | HKCU | HKCR | HKU | HKCC ]
    SubKey   所选 ROOTKEY 下的注册表项的全名。

  ValueName  所选注册表项下的要比较的值的名称。
             省略时,该项下的所有值都会得到比较。

  /ve        比较空白值名称的值(默认)。

  /s         比较所有子项和值。

  Output     [/oa | /od | /os | /on]
             省略时,只显示不同的结果。
    /oa      显示所有不同和匹配结果。
    /od      只显示不同的结果。
    /os      只显示匹配结果。
    /on      不显示结果。

返回代码:

  0 - 成功,比较的结果相同
  1 - 失败
  2 - 成功,比较的结果不同

注意:
  每个输出行前面显示的符号定义为:
  = 表示 FullKey1 等于 FullKey2 数据
  < 指的是 FullKey1 数据,与 FullKey2 数据不同
  > 指的是 FullKey2 数据,与 Fullkey1 数据不同

例如:

  REG COMPARE HKLM\Software\MyCo\MyApp HKLM\Software\MyCo\SaveMyApp
    将注册表项 MyApp 下的所有值跟 SaveMyApp 比较

  REG COMPARE HKLM\Software\MyCo HKLM\Software\MyCo1 /v Version
    比较注册表项 MyCo 和 MyCo1 下的值 Version

  REG COMPARE \\ZODIAC\HKLM\Software\MyCo \\. /s
    将 ZODIAC 上 HKLM\Software\MyCo 下的所有子项和值和当前机器上
    的相同项比较
@echo off
REG COMPARE HKEY_CURRENT_USER\Console HKEY_CURRENT_USER\Console\Test
上面的程序将比较注册表项HKEY_CURRENT_USER\Console和HKEY_CURRENT_USER\Console\Test之间的所有值。


计算机面板非系统图标注册表位置
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace


share共享

net share /?
删除共享
for %i in (C$ IPC$ ADMIN$) do net share %i /delete
添加共享
net share C$=C:\
禁用共享
net stop lanmanserver

列出映射的驱动器
net use
删除
net use /del \\xxxx\folder1



重启电脑

当前日期时间
C:\>date /t & time /t
2020-09-09
09:36

计划1小时后关机
C:\>shutdown /s /t 3600

关机前提示
E:\>shutdown /s /t 50 /c "i am going to sleep now..."

中断关机
C:\>shutdown /a

shutdown /?

从命令行关闭/重新启动远程计算机(需要在PsShutdown目录中执行)
PsShutdown.exe -u username -p password \\Remotecomputer
PsShutdown.exe -t 15:30 -u username -p password \\Remotecomputer
PsShutdown.exe -r -u username -p password \\RemoteComputerName


AT命令
at 05:30:00PM shutdown -s    #在下午5点半关机
at 11:00:00PM shutdown -r    #下午11点重启电脑
at 6:00:00PM /every:M,T,W,TH,F,SA,SU shutdown -s    #每月下午6点关机
at     #查看所有作业
at /?  #查看帮助

Schtasks命令
Schtasks create /RU username /RP password /SC schedule_frequency /MO Schedule_modifier /D days /M months /TN taskname /TR Task_command /ST start_time /SD start_day /ED end_date


schtasks /create /sc once /tn "auto shutdown my computer" /tr "shutdown -s" /st 15:30

schtasks /create /sc daily /tn "auto shutdown my computer daily" /tr "shutdown -s" /st 23:00

Schtasks /create /RU administrator /RP adminpassword /SC weekly /D SAT /TN defrag /TR c:\windows\system32\defrag.exe /ST 10:00:00

schtasks /Change /TN defrag /Disable  #禁用计划任务
schtasks /Change /TN defrag /Enable   #启用计划任务
Schtasks /delete /TN defrag    #删除指定计划的任务
schtasks /delete /TN *    #删除所有计划的任务,慎用!!!
schtasks    #查看计划任务
如果schtasks 在cmd上提示错误: “无法加载列资源”。解决办法如下:
查看cmd 编码:”chcp”,如果返回936,说明是中文GBK编码,此时 schtasks就会报错,可以将编码936调整 为 437 美国编码。调整方法如下:chcp  437

print打印作业

列出所有正在进行/排队的作业。它打印有关每个打印机作业的许多详细信息。
wmic printjob get
要仅打印我们感兴趣的最少信息,我们可以使用以下命令
wmic printjob get jobid, document, jobstatus
取消打印作业
wmic printjob where jobid=<jobnumber> delete
暂停打印作业
wmic printjob where jobid=<jobnumber> pause
恢复暂停的打印作业
wmic printjob where jobid=<jobnumber> resume

在cmd中输入RUNDLL32.EXE PRINTUI.DLL,PrintUIEntry可以得到以下信息

用法: rundll32 printui.dll,PrintUIEntry [options] [@commandfile]
/a[file] 二进制文件名
/b[name] 基本打印机名
/c[name] 如果操作在远程机器上,unc 机器名
/dl 删除本地打印机
/dn 删除网络打印机连接
/dd 删除打印机驱动程序
/e 显示打印首选项
/f[file] inf 文件或输出文件
使用 /f 指定的 INF 文件可能依赖的 INF 文件的 /F[file] 位置
/ga 添加每个机器打印机连接(用户登录时此连接将传播到用户)
/ge 枚举每个机器打印机连接
/gd 删除每个机器打印机连接(用户登录时此连接将被删除)
/h[arch] 驱动程序体系结构,为下列之一: x86 或 x64 或 Itanium
/ia 用 INF 文件安装打印机驱动程序
/id 用添加打印机驱动程序向导安装打印机驱动程序
/if 用 INF 文件安装打印机
/ii 用带 INF 文件的添加打印机向导安装打印机
/il 用添加打印机向导安装打印机
/in 添加网络打印机连接
/ip 使用网络打印机安装向导安装打印机
/j[provider] 打印提供程序名称
/k 将测试页打印到指定的打印机,不能安装打印机时的命令组合
/l[path] 打印机驱动程序源路径
/m[model] 打印机驱动程序型号名
/n[name] 打印机名
/o 显示打印机队列查看
/p 显示打印机属性
/q 安静模式,不显示错误信息
/r[port] 端口名
/s 显示服务器属性
/Ss 将打印机设置存到一个文件
/Sr 从一个文件还原打印机设置
储存或还原必须放在命令结尾的打印机设置选项标志:
2 PRINTER_INFO_2
7 PRINTER_INFO_7
c 颜色配置文件
d 打印机数据
s 安全描述符
g 全局 DevMode
m 最低设置
u 用户 DevMode
r 解决名称冲突
f 强制使用名称
p 解析端口
i 驱动程序名称冲突
/u 如果已安装,则使用现有的打印机驱动程序
/t[#] 起始的以零为基础的索引页
/v[version] 驱动程序版本,为下列之一:“类型 2 - 内核模式”或“类型 3 - 用户模式”
/w 如果在 INF 中找不到指定的驱动程序,则提示用户
/y 将打印机设置为默认打印机
/Xg 获得打印机设置
/Xs 设定打印机设置
/z 不要自动共享这台打印机
/Z 不要自动生成打印机名
/K 更改 /h 的含义,使 x86 或 x64 或 Itanium 接受 2、3、4,并更改 /v 的含义,使“类型 3 - 用户模式”接受 3
/Z 共享这台打印机,只能跟 /if 选项一起使用
/? 帮助信息
@[file] 命令行参数文件
/Mw[message] 确认命令之前显示警告消息
/Mq[message] 确认命令之前显示确认消息
/W[flags] 指定向导(APW 和 APDW)的标志和切换
r 使向导可以从上一页重新启动
/G[flags] 指定全局标志和切换
w 抑制安装程序驱动程序警告 UI (超级静声模式)


例如:
运行服务器属性:
rundll32 printui.dll,PrintUIEntry /s /t1 /c\\machine
运行打印机属性:
rundll32 printui.dll,PrintUIEntry /p /n\\machine\printer
本地运行添加打印机向导:
rundll32 printui.dll,PrintUIEntry /il
在 \\machine:
rundll32 printui.dll,PrintUIEntry /il /c\\machine 运行添加打印机向导
运行队列查看:
rundll32 printui.dll,PrintUIEntry /o /n\\machine\printer
运行 INF 安装:
rundll32 printui.dll,PrintUIEntry /if /b "Test Printer" /f c:\infpath\infFile.inf /r "lpt1:" /m "Brother DCP-128C"
运行 INF 安装(具有 INF 依赖关系)。在此示例中,prnbr002.inf 依赖于 ntprint.inf
rundll32 printui.dll, PrintUIEntry /ia /m "Brother DCP-128C" /K /h x64 /v 3 /f "c:\infpath\prnbr002.inf" /F "c:\infpath\ntprint.inf"
使用 INF 运行添加打印机向导:
rundll32 printui.dll,PrintUIEntry /ii /f c:\infpath\infFile.inf
使用内置打印机驱动程序添加打印机:
rundll32 printui.dll,PrintUIEntry /if /b "Test Printer" /r "lpt1:" /m "Brother DCP-128C"
添加每个机器打印机连接(用户登录时此连接将传播到用户):
rundll32 printui.dll,PrintUIEntry /ga /c\\machine /n\\machine\printer /j"LanMan Print Services"
删除每个机器打印机连接(用户登录时此连接将被删除):
rundll32 printui.dll,PrintUIEntry /gd /c\\machine /n\\machine\printer
枚举每个机器打印机连接:
rundll32 printui.dll,PrintUIEntry /ge /c\\machine
使用 INF 添加打印机驱动程序:
rundll32 printui.dll,PrintUIEntry /ia /c\\machine /m "Brother DCP-128C" /h "x86" /v "Type 3 - User Mode" /f c:\infpath\infFile.inf
使用 INF 添加打印机驱动程序:
rundll32 printui.dll,PrintUIEntry /ia /K /c\\machine /m "Brother DCP-128C" /h "x86" /v 3
添加内置打印机驱动程序:
rundll32 printui.dll,PrintUIEntry /ia /c\\machine /m "Brother DCP-128C" /h "Intel" /v "Type 3 - Kernel Mode"
删除打印机驱动程序:
rundll32 printui.dll,PrintUIEntry /dd /c\\machine /m "Brother DCP-128C" /h "x86" /v "Type 3 - User Mode"
删除打印机驱动程序:
rundll32 printui.dll,PrintUIEntry /dd /K /c\\machine /m "Brother DCP-128C" /h "x86" /v 3
将打印机设置为默认打印机:
rundll32 printui.dll,PrintUIEntry /y /n "printer"
设置打印机注解:
rundll32 printui.dll,PrintUIEntry /Xs /n "printer" comment "My Cool Printer"
取得打印机设置:
rundll32 printui.dll,PrintUIEntry /Xg /n "printer"
取得文件中的打印机设置保存结果:
rundll32 printui.dll,PrintUIEntry /f "results.txt" /Xg /n "printer"
设置打印机设置命令使用:
rundll32 printui.dll,PrintUIEntry /Xs /n "printer" ?
将所有打印机设置存入一个文件:
rundll32 printui.dll,PrintUIEntry /Xs /n "printer" ?
从一个文件还原所有打印机设置:
rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat"
将二级打印机信息存入一个文件:
rundll32 printui.dll,PrintUIEntry /Ss /n "printer" /a "file.dat" 2
从一个文件还原打印机安全描述符:
rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat" s
从一个文件还原打印机全局 devmode 和打印机数据:
rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat" g d
从文件最少设置还原并分析端口名:
rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat" m p
启用打印机的客户端呈现:
rundll32 printui.dll,PrintUIEntry /Xs /n"printer" ClientSideRender enabled
禁用打印机的客户端呈现:
rundll32 printui.dll,PrintUIEntry /Xs /n"printer" ClientSideRender disabled


批处理

四种运行bat方式
①右键管理员身份脚本
②管理员身份运行cmd,在里面输入脚本路径回车
③计划任务
④放到开机启动文件夹shell:startup

延迟
使用这些版本的Windows附带的choice命令,可以将批处理文件延迟0到9999秒之间的任意时间。在此示例中,我们说明了五秒钟的延迟。如果要增加或减少这次,请将“ 5”更改为其他值
CHOICE /N /C YN /T 3 /D Y >NUL

空白行
要在批处理文件中创建空白行,请在echo命令后立即添加一个方括号或句点,不要带空格
echo.


set命令
set 显示所有具有分配值的环境变量的列表
set /A variable-name=value    
变量名和值直接不能有空格
variable-name是要设置的变量的名称。
value是需要针对变量设置的值。
/A 如果值本质上需要为数字,则使用此开关。
调用变量需要用%符号括起来。
例子
@echo off
set message=Hello World

echo %message%


HKEY_CLASSES_ROOT中.txt的默认项
assoc .txt
取消创建文本文件
assoc .txt=
注意=后面有空格

右键创建文本文件
assoc .txt=txtfile


TITLE-在控制台的标题栏中显示自定义名称

rundll32


rundll32.exe desk.cpl,InstallScreenSaver   #屏幕保护程序
rundll32 user32.dll,LockWorkStation   # 锁屏
Rundll32.exe shell32.dll,Control_RunDLL HotPlug.dll  #安全删除硬件



注释两种方法推荐::
Rem—用于添加注释以说明此批处理文件的确切功能
:: —这使您可以添加批处理文件运行时忽略的注释和文档信息,建议多行使用::



ECHO(回声)—在屏幕上打印所需的文本
@echo off —关闭显示提示,以仅在干净的行上显示消息,通常,此特定行位于文件的开头
命令“ echo off”关闭整个脚本的显示,但“ echo off”命令本身除外。前面的“ @”符号“ @”使命令也适用于其自身。


PAUSE(暂停)—防止执行命令后关闭控制台窗口。运行多个任务时,您可以在脚本末尾或特定命令后使用此命令,并希望在它们之间暂停


cls:清除命令提示符

Copy [source] [destination] —复制文件或者文件夹下的所有文件。如果未标识任何目的地,则默认为当前工作目录。如果文件名包含空格,则必须带双引号
COPY "C:\Program Files (x86)\开票软件\913101000000000001.3\Log\*.log"



Del [filename] —删除文件,而不是目录。要递归(/s),要确认(/p),不提示(/q)
Del /p /s *.log



Dir —列出目录的内容。要递归(/s),每行一个文件或目录的完整路径(/b)
dir /s /b
清单中包括隐藏文件和系统文件(/a),仅列出隐藏的文件(/ah)
dir /a

使用CLIP命令将命令结果记录在剪贴板上
dir | clip

dir >>c:\1.txt
“ >>”运算符实际上是一个“附加到文件”命令,它将创建文本文件并添加详细信息。如果文件存在,它将在末尾附加信息。如果要擦除所有旧数据并创建新文件,请使用“>”。


doskey /history     #查看命令历史记录,窗口关闭重新打开就查不到历史记录
也可以按F7或者上下键
通过键入color命令后跟两位数字来试用Windows 7命令窗口的配色方案。第一个十六进制数字是背景,第二个是前景。
color 16


 TREE –强大的目录可视化器
tree /f

观看命令提示符星球大战
telnet towel.blinkenlights.nl


@ECHO OFF
::当前windows版本
VER
PAUSE

::清屏
CLS

::当前路径
CD
PAUSE

::当前路径上级路径
CD..
CD
PAUSE

::当前路径上两级路径
CD..\..
CD
PAUSE

::切换路径
CD \Program Files
CD
PAUSE

::指定路径
CD %USERPROFILE%
CD
PAUSE

@echo off
cls
:start
echo Example of a  loop
set choice=
set /p choice="Do you want to restart? Press 'y' and enter for Yes: "
if not '%choice%'=='' set choice=%choice:~0,1%
if '%choice%'=='y' goto start

脚本检测方法

 将以下脚本内容复制粘贴到任意扩展名为.bat的批处理文件中,双击执行,即可输出检测结果。(注意:bat编码集需要选择为ANSI

 

 @echo off

set tsay_path=C:\Windows\tsay.exe

set ttry_path=C:\Windows\ttry.exe

if exist %tsay_path% goto find

if exist %ttry_path% goto find

echo 本机没有找到【incaseformat】病毒,安装安全软件,排查信任区并确认实时监控是否开启

echo.

pause

exit

:find

echo 本机存在【incaseformat】病毒,请联系管理员处理

echo.

pause

exit



例子1

@echo off
Rem This is for listing down all the files in the directory Program files
dir "C:\Program Files" > C:\lists.txt
echo "The program has completed"
该代码执行以下操作-
使用echo off命令来确保在执行代码时不显示命令。
Rem命令用于添加注释以说明此批处理文件的确切功能。
dir命令用于获取C:\ Program Files位置的内容。
“>”命令用于将输出重定向到文件C:\ lists.txt
最后,echo命令用于告诉用户操作已完成。



例子2

删除文件中大于7天的文件
参考
https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/forfiles
@echo off
::移除当前文件夹下时间大于一天的所有文件
forfiles /p "C:\Program Files (x86)\开票软件\913101000000000001.3\Log"  /m *.* /s /c "cmd /c Del @path" /d -1

:: forfiles [/p <Path>] [/m <SearchMask>] [/s] [/c "<Command>"] [/d [{+|-}][{<Date>|<Days>}]]
:: forfiles ——选择一个文件或一组文件并执行命令
:: /p <Path> ——指定开始搜索的路径,默认从当前工作目录开始搜索,路径不能以斜杠结尾
:: /m <SearchMask> ——根据指定的搜索掩码搜索文件,默认搜索掩码为*.\*,例如*.log,*.bat,*
:: /s ——指示forfiles命令以递归方式搜索子目录
:: /c "<Command>" ——在每个搜索到的文件上运行指定的命令,命令字符串用引号引起来,默认命令是"cmd /c echo @file"
:: /d [{+|-}][{<Date>|<Days>}] ——选择在指定时间范围内具有最后修改日期的文件,+代表晚于-代表早于,Date格式MM/DD/YYYY
:: @path ——返回文件的完整路径


若要运行不是可执行文件(即.exe)的命令,请在命令前加上cmd / c来加载Cmd.exe,如下所示:

cmd /c dir > c:\test.out

例子3

@echo off
for /f "tokens=4-5 delims=. " %%i in ('ver') do set VERSION=%%i.%%j
if "%version%" == "6.0" echo Windows Vista.
if "%version%" == "6.1" echo Windows 7
if "%version%" == "6.2" echo Windows 8
if "%version%" == "6.3" echo Windows 8.1
if "%version%" == "10.0" echo Windows 10.

如果打算将批处理文件分发到可能运行或可能不运行同一Windows版本的其他计算机,则需要在尽可能多的Windows版本中测试批处理文件。

以下示例显示了如何检查各种操作系统版本以检查相关的Windows版本
@ECHO OFF
:: Check for Windows NT 4 and later

IF NOT "%OS%"=="Windows_NT" GOTO DontRun
:: Check for Windows NT 4
VER | FIND "Windows NT" >NUL && GOTO DontRun
:: Check for Windows 2000
VER | FIND "Windows 2000" >NUL && GOTO DontRun
:: Place actual code here . . .
:: End of actual code . . .
EXIT

:DontRun
ECHO Sorry, this batch file was written for Windows XP and later versions only


例子4

按文件后缀分类存储
@echo off

rem For each file in your folder
for %%A in (".\*") do (
rem check if the file has an extension and if it is not our script
if "%%~xA" NEQ "" if "%%~dpxA" NEQ "%~dpx0" (
rem check if extension folder exists, if not it is created
if not exist "%%~xA" mkdir "%%~xA"
rem Move the file to directory
move "%%A" "%%~dpA%%~xA\"
))


@echo off
set "filename=C:\Folder1\Folder2\File.ext"
For %%A in ("%filename%") do (
    echo full path: %%~fA
:: full path: C:\Folder1\Folder2\File.ext
    echo directory: %%~dA
:: directory: C:
    echo path: %%~pA
:: path: \Folder1\Folder2\
    echo file name only: %%~nA
:: file name only: File
    echo extension only: %%~xA
:: extension only: .ext
    echo expanded path with short names: %%~sA
:: expanded path with short names: C:\Folder1\Folder2\File.ext
    echo attributes: %%~aA
:: attributes:
    echo date and time: %%~tA
:: date and time:
    echo size: %%~zA
:: size:
    echo drive + path: %%~dpA
:: drive + path: C:\Folder1\Folder2\
    echo name.ext: %%~nxA
:: name.ext: File.ext
    echo full path + short name: %%~fsA)
:: full path + short name: C:\Folder1\Folder2\File.ext
pause


%% A:文件夹中的每个文件。
(“.\”):根文件夹。使用命令提示符时,必须先将提示符定向到特定目录,然后再更改文件名,删除文件等。使用批处理文件,您只需要将.bat文件粘贴到您选择的目录中

EQU  equal
NEQ  not equal
LSS  less 
LEQ  less or equal
GTR greater
GEQ  greater or equal


 ROBOCOPY     ::     Windows 的可靠文件复制

https://www.windows-commandline.com/robocopy-command-syntax-examples/

@echo off
rem %%i为第1字段,%%j为第2字段,%%k为第3字段,请根据需要修改获取的变量。
for /f "tokens=1,2,* " %%i in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\fwkp.exe" /v "Path"') do set "dest=%%k/bin"
echo 注册表值为%dest%

::if exist "%dest%/cc3268.dll" (echo "File exists") else (echo "File does not exist" robocopy . "%dest%"  cc3268.dll  /LOG+:out.log)

if exist "%dest%/cc3268.dll" (echo "File exists") else (robocopy . "%dest%"  cc3268.dll  /LOG+:out.log)

::robocopy . "%dest%"  cc3268.dll  /LOG+:out.log

pause
@echo off
set "dest=C:\Program Files (x86)\sajt-g3"
if exist "%dest%/update/update.jpg" (robocopy . "%dest%"  *.jar GtsTemplate.xml /e /LOG+:out1.log) else (echo "Version not satisfied" >out1.log)

---------------------------------------
@echo off
rem 更新百望诺E票安装路径\skp下的SkDev.dll和NISEC_SKPC.dll
for /f "tokens=1,2,* " %%i in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\sajt.exe" /v "PATH"') do set "dest=%%k\skp"
:: 先杀进程
START /wait taskkill /f /im eInvoice_auto.exe
for /f "tokens=4-5 delims=. " %%i in ('ver') do set VERSION=%%i.%%j
:: 由于robocopy不支持xp系统,判断操作系统版本
:: Microsoft Windows XP [版本 5.1.2600] on xp
if "%version%" == "[版本.5" goto :xcopy
:: Windows Vista
if "%version%" == "6.0" goto :robocopy
:: Microsoft Windows [版本 6.1.7601]  on Windows 7
if "%version%" == "6.1" goto :robocopy
:: Windows 8
if "%version%" == "6.2" goto :robocopy
:: Windows 8.1 
if "%version%" == "6.3" goto :robocopy
:: Microsoft Windows [版本 10.0.18363.1411] on Windows 10. 
if "%version%" == "10.0" goto :robocopy


:xcopy
if exist "%dest%/NISEC_SKPC.dll" (xcopy *.dll "%dest%" /Y >out.log )  else (echo "File not exists" >out.log)
exit /b /0

:robocopy
if exist "%dest%/NISEC_SKPC.dll" (robocopy . "%dest%"  *.dll  /LOG+:out.log)  else (echo "File not exists" >out.log)
exit /b /0



-------------------------------------------------
:loop
set "name=the name of your executable"
tasklist /FI "IMAGENAME eq %name%" 2>NUL | find /I /N "%name%">NUL
if "%ERRORLEVEL%"=="0" (
    taskkill /IM %name% /f
    TIMEOUT 5
    goto :loop





评论

此博客中的热门博文

自动发送消息

  # https://pyperclip.readthedocs.io/en/latest/ import pyperclip while True :     # pyperclip.copy('Hello, world!')     # pyperclip.paste()     # pyperclip.waitForPaste()     print ( pyperclip. waitForNewPaste ( ) )     # 获取要输入新的坐标,也可以通过autohotkey import time import pyautogui  as pag import os   try :     while True :         print ( "Press Ctrl-C to end" )         x , y = pag. position ( )   # 返回鼠标的坐标         posStr = "Position:" + str ( x ) . rjust ( 4 ) + ',' + str ( y ) . rjust ( 4 )         print ( posStr )   # 打印坐标         time . sleep ( 0.2 )         os . system ( 'cls' )   # 清楚屏幕 except KeyboardInterrupt :     print ( 'end....' )     # 打印消息 import pyautogui import time import pyperclip   content = """   呼叫龙叔! 第二遍! 第三遍! 第四遍...

学习地址

清华大学计算机系课程攻略 https://github.com/PKUanonym/REKCARC-TSC-UHT 浙江大学课程攻略共享计划 https://github.com/QSCTech/zju-icicles https://home.unicode.org/ 世界上的每个人都应该能够在手机和电脑上使用自己的语言。 http://codecanyon.net   初次看到这个网站,小伙伴们表示都惊呆了。原来代码也可以放在网上卖的?!! 很多coder上传了各种代码,每个代码都明码标价。看了下销售排行,有的19刀的卖了3万多份,额di神啊。可以看到代码的演示效果,真的很漂亮。代码以php、wordpress主题、Javascript、css为主,偏前台。 https://www.lintcode.com/ 算法学习网站,上去每天刷两道算法题,走遍天下都不怕。 https://www.codecademy.com/ 包含在线编程练习和课程视频 https://www.reddit.com/ 包含有趣的编程挑战题,即使不会写,也可以查看他人的解决方法。 https://ideone.com/ 在线编译器,可运行,可查看代码示例。 http://it-ebooks.info/ 大型电子图书馆,可即时免费下载书籍。 刷题 https://github.com/jackfrued/Python-100-Days https://github.com/kenwoodjw/python_interview_question 面试问题 https://github.com/kenwoodjw/python_interview_question https://www.journaldev.com/15490/python-interview-questions#python-interpreter HTTP 身份验证 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Authentication RESTful 架构详解 https://www.runoob.com/w3cnote/restful-architecture.html https://www.rosettacode.org/wiki/Rosetta_C...

mysql 入门

资料 https://dinfratechsource.com/2018/11/10/how-to-install-latest-mysql-5-7-21-on-rhel-centos-7/ https://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html https://www.runoob.com/mysql/mysql-create-database.html https://www.liquidweb.com/kb/install-java-8-on-centos-7/ 工具 https://www.heidisql.com/ HeidiSQL是免费软件,其目标是易于学习。 “ Heidi”使您可以从运行数据库系统MariaDB,MySQL,Microsoft SQL或PostgreSQL的计算机上查看和编辑数据和结构 MySQL 连接时尽量使用 127.0.0.1 而不是 localhost localhost 使用的 Linux socket,127.0.0.1 使用的是 tcp/ip 为什么我使用 localhost 一直没出问题 因为你的本机中只有一个 mysql 进程, 如果你有一个 node1 运行在 3306, 有一个 node2 运行在 3307 mysql -u root -h localhost -P 3306 mysql -u root -h localhost -P 3307 都会连接到同一个 mysql 进程, 因为 localhost 使用 Linux socket, 所以 -P 字段直接被忽略了, 等价于 mysql -u root -h localhost mysql -u root -h localhost 而 -h 默认是 localhost, 又等价于 mysql -u root mysql -u root 为了避免这种情况(比如你在本地开发只有一个 mysql 进程,线上或者 qa 环境有多个 mysql 进程)最好的方式就是使用 IP mysql -u root -h 127 .0 .0 .1 -P 3307 strac...