自己整理多年,分享一下
一些是原创,一些是转载,还有一些是修改~
有什么不足欢迎大家指正
使该批处理在管理员权限下运行 | Ver | find "5." >nul && goto Administrator | | >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" | | if %Errorlevel% EQU 0 goto Administrator | | Mshta vbscript:createobject("shell.application").shellexecute("%~f0","%*","","runas",1)(window.close) | | EXIT /B | | :Administrator | | PUSHD %~dp0 | | Pause>nulCOPY |
检测系统版本、位数
ver | find "版本号" > NUL && 成功时执行命令 || 失败时执行命令
常用版本号:
XP: 5.0 5.1 5.2
win7: 6.0 6.1
win8: 6.2. 6.3. 6.4.
win10: 10. | IF /i "%PROCESSOR_ARCHITECTURE%" EQU "AMD64" ( | | echo 这是一个64位的系统! | | ) else echo 这是一个32位的系统!COPY |
精确检测桌面路径、我的文档路径 | Set "用户目录路径键值=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" | | For /f "Tokens=3* delims=*" %%a in ( | | 'Reg Query "%用户目录路径键值%" /v "Desktop" 2^>nul' | | ) do Set "桌面路径=%%a" | | for /f "tokens=3*" %%a in ( | | 'reg query "%用户目录路径键值%" /v "Personal" 2^>nul' | | ) do Set "我的文档目录=%%a" | | Set 桌面路径 | | Set 我的文档目录 | | pause>nulCOPY |
判断数字合法性: | set /a _var=%var% 2>nul | | if "%_var%"=="%var%" echo %var%是合法的十进制数值COPY |
蜂鸣(适用于XP) | for /f "delims=R`" %%a in ( | | 'cmd /u /c echo 切' | | ) do Set "蜂鸣=%%a" | | set/p=%蜂鸣%<nulCOPY |
刷新桌面、系统 | >%TMP%\TMP.INF ( | | Echo [Version] | | Echo Signature=$Chicago$ | | Echo Provider=老刘 | | Echo [DefaultInstall]) | | RUNDLL32 SETUPAPI.DLL,InstallHinfSection ^ | | DefaultInstall 128 %TMP%\TMP.INF | | DEL /F %TMP%\TMP.INFCOPY |
——————————————————
将文本abc.txt的内容(第一行)赋值给变量FirstLine。set /p FirstLine=<abc.txtCOPY 批处理全屏运行代码(仅限32位XP系统): | @echo off | | echo exit | CMD /k prompt e 100 B4 00 B0 12 CD 10 B0 03 CD 10 CD 20 $_g$_q$_ | debug 1>nul | | chcp 437 1>nul | | graftabl 936 1>nul | | PAUSECOPY |
————————————————
CMD获取当前目录的变量 | @echo off | | echo %~dpnx0 | | | | | | echo. | | echo %~s0 | | | | pause>nulCOPY |
使用XCOPY获取按键 | set "按键=" | | for /f "delims=" %%a in ('xcopy /w . . 2^>nul') do if not defined 按键 set "按键=%%a" | | set "按键=%按键:~-1%" | | if "%按键%" EQU "" (echo 无效按键) else echo 你按下了%按键%!COPY |
————————————————
10进制转为16进制的函数,调用方法:%d-h:#a#=变量名%set "d-h=setlocal enabledelayedexpansion&set/a dx=#a#&set xs=0123456789abcdef&(for /l %%z in (1,1,4) do set /a x%%z=dx%%16,dx=dx/16)&(for /f "tokens=1-4" %%1 in ("!x1! !x2! !x3! !x4!") do set hx=!xs:~%%4,1!!xs:~%%3,1!&(if !hx!==00 set hx=)&(for %%z in ("!hx!!xs:~%%2,1!!xs:~%%1,1!") do endlocal&set #a#=%%~z))"COPY 取字符串长度函数,调用方法:%len:#a#=结果变量名 字符串变量名%set "len=for /f "tokens=1-3" %%1 in ("#a#") do setlocal enabledelayedexpansion&(if defined %%2 (set /a z=8180,x=0&(for /l %%a in (1,1,14) do set/a "y=(z-x)/2+x"&(for %%b in (!y!) do if "!%%2:~%%b,1!" equ "" (set/a z=y) else (set/a x=y)))) else (set z=0))&(for %%z in ("!z!") do endlocal&set %%1=%%~z)"COPY ——————————————————————————————
变量操作:
截取——
%变量名:~忽略的字符长度,显示的字符长度%
%变量名:~从起始处忽略的字符长度%
%变量名:~,从起始处显示的字符长度%
替换——%变量名:要替换的内容=替换后的内容%
——————————
COMMAND 1>nul 屏蔽回显(同COMMAND >nul)
COMMAND 2>nul 屏蔽错误提示
利用句柄备份屏蔽命令回显和错误回显,保留正常回显:@echo off 2>nul 3>&2COPY
mshta vbscript:VBS命令(Window.Close)COPY 给Number的值加一,同理还可用-*/代替set /a number+=1COPY ——————————————————————————————
INF更新INI文件函数块 | Goto :Eof | | :UpdateInis | | Pushd "%Tmp%" | | (For %%a in ( | | "[Version]" | | "Signature=$Chicago$" | | "[DefaultInstall]" | | "UpdateInis=更新INI配置文件" | | "[更新INI配置文件]" | | ) Do Echo %%~a)>.\INF.TMP | | Echo "%~1","%~2",%~3 >>.\INF.TMP | | RUNDLL32 SETUPAPI.DLL,InstallHinfSection ^ | | DefaultInstall 128 .\INF.TMP | | Del /F .\INF.TMP 2>nul | | PopdCOPY |
——————————————————————————————
获取回车符: | setlocal enabledelayedexpansion | | for /f "delims=" %%a in ( | | 'ipconfig^|findstr /i "Address"' | | ) do set CarriageReturn=%%a | | set CarriageReturn=!CarriageReturn:~-1!COPY |
获取换行符: | set LineFeed=^ | | %空行001% | | %空行002%COPY |
注:必须要有两个空行用作转义
另:请使用!Var!形式调用,使用%var%或Call+%%var%%会使回车符丢失,
换行符忽略后面的字符串。
——————————————————————————————certutil -decodehex hex.txt bin.txtCOPY ::Hex2Bincertutil -encode bin.txt Encode.txtCOPY ::Base64_Encodecertutil -decode Encode.txt Decode.txtCOPY ::Base64_Decode
——————————————————————————————
检测第三方是否存在/可用 | Set 第三方名称=PrintANSI | | For %%a in (%第三方名称%.exe) Do ^ | | If "%%~$PATH:a" EQU "" ^ | | If Not Exist .\%第三方名称%.exe ^ | | Echo 第三方丢失。COPY |
——————————————————————————————
批处理调用VBS创建快捷方式>>(Desktop为桌面)mshta VBScript:Execute("Set a=CreateObject(""WScript.Shell""):Set b=a.CreateShortcut(a.SpecialFolders(""Desktop"") & ""\快捷方式名称.lnk""):b.TargetPath=""快捷方式指向的文件"":b.WorkingDirectory=""工作目录路径"":b.Save:close")COPY Clip——命令行工具的输出重定向到 Windows 剪贴板
命令行|批处理安装INF:RunDll32 advpack.dll,LaunchINFSection INF文件路径.INF,DefaultInstallCOPY
RUNDLL32 SETUPAPI.DLL,InstallHinfSection DefaultInstall 128 INF文件路径.INF COPY rundll用法:rundll32 <DLL文件名>,<入口点>,<调用参数>
注:RUNDLL的对入口点大小写敏感!
强制终止进程TASKKILL /f /im 进程名(可用通配符)COPY 第二种干掉指定进程的方法:FOR /F "TOKENS=2" %%A IN ('TASKLIST ^| FIND /i "explorer.exe"') DO (tskill %%A 1>nul 2>&1)COPY 拨号:rasdial 连接名称(一般是“宽带连接") 帐号 密码COPY 得到CMD释放出的文件wmic process where name="cmd.exe" get commandlineCOPY 获得已保存的wifi列表netsh wlan show profilesCOPY 显示已保存的cmcc热点的信息(包括密码)netsh wlan show profile name="cmcc" key=clearCOPY 共享WIFI:netsh wlan set hostednetwork mode=allow ssid=wifi名称 key=密码COPY 开启:netsh wlan start hostednetworkCOPY 关闭:netsh wlan stop hostednetworkCOPY 本地连接IP4协议设置:Netsh Interface IP SET Address 本地连接 Static 1.0.0.0 255.255.255.1COPY 卸载指定补丁:wusa /uninstall /kb:COPY 强制把一个文本文件当VBS运行Wscript(cscript) -nologo -e:vbscript VBScriptFilesPATHCOPY
sort /+65535 你的文件.txt /o 倒序结果.txtCOPY
rundll32.exe shell32.dll #60 %弹出关机对话框%COPY
Fsutil file createnew FilePath FileSize %创建指定大小文件,使用Nul填充%COPY
Takeown /f "FilePath" && Icacls "FilePath" /grant administrators:F %得到文件所有权及权限%COPY mountvol 驱动器虚拟成路径
subst 路径虚拟成驱动器 |