windows和linux编写bash脚本的时候遇见条件,循环,语句遗忘时,都可以通过help for查询。
1,win系统cmd命令bat批处理语法
::批处理直接调用其他其他批处理脚本时,当前批处理之后的脚本将不再执行。 ::批处理使用call调用其他批处理脚本,会阻塞等待被调用的批处理执行完毕之后继续执行。 ::批处理使用start调用其他批处理脚本,重新开启一个cmd执行被调用的批处理,再直接执行之后的脚本。 ::cmd执行bat的机制:cmd是读一句执行一句,何谓一句? ::一般的一行,for, if的整句,&、&&、|| 等由连接符连接的整行,()圆扩符之间的代码...都叫一句,嵌套格式 ::启用了"延迟环境变量扩展"后,当CMD在解释涵有嵌套格式的命令时,他会把嵌套的命令依次执行依次再进行替换 @SETLOCAL ENABLEDELAYEDEXPANSION @set var=test & echo %var% @set /p p=input && echo %p% @if %p%==aaa ( set p=bbb ) @if %p% leq 9 ( echo %p% ) else ( echo 9 ) @for /l %%i in (1,1,5) do ( set var=%%i && echo %var% ) :label @if not exist x%cd%\test.log ( echo notexist ) @call tasklist | findstr cmd @goto label @echo off setlocal enabledelayedexpansion ::setlocal disabledelayedexpansion :INIT echo "main init" set PATH=c:\;%PATH% set str=test if %str%==test ( set str=loop echo !str! if yes enabledelayedexpansion loop echo %str% if not enabledelayedexpansion test ) ::choice /t 90 /d y /n >nul ::tasklist /nh | find /i "msiexec.exe" ::tasklist /FI "STATUS eq RUNNING" | findstr msiexec ::tasklist | find /i "msiexec.exe" && taskkill /im msiexec.exe /f ::msiexec /a "d:\python-2.7.15.msi" /qb TARGETDIR="D:\python32-2.7.15" :MIAN echo "main call" echo "loop" > test.txt type test.txt FOR %%i IN (A B C D) DO @echo [%%i] for /f %%i in (test.txt) do echo %%i FOR /F "usebackq tokens=1* delims==" %%i IN (`set`) DO @echo [%%i:%%j] FOR /F "usebackq tokens=1,4 delims== " %%i IN (`dir`) DO @echo [%%i-%%j] FOR /F "usebackq tokens=1,2 delims== " %%i IN (`tasklist`) DO @echo [%%i %%j] FOR /F "usebackq tokens=1 delims== " %%i IN (`tasklist /FI "STATUS eq RUNNING"`) DO ( if defined %%i echo %%i NG %%i not set yet echo ------%%i ) :loop set taskfind=0 tasklist /FI "STATUS eq RUNNING" | find /i "msiexec.exe" && set taskfind=1 if %taskfind%==1 ( echo "main loop" if defined %errorlevel% echo %errorlevel% ping -n 6 127.0.0.1 > nul ::choice /t 6 /d y /n >nul goto :loop ) echo "main exit" goto END :FAIL echo "main fail" :END @pause
2,win如何制作msi安装程序的绿色版本
msiexec /a "d:\python-2.7.18.msi" /qb TARGETDIR="D:\python-2.7.18" msiexec /a "d:\python-2.7.18.amd64.msi" /qb TARGETDIR="D:\python-2.7.18.amd64"
3,win批处理获取当前脚本路径
批处理命令获取当前盘符和当前目录 当前盘符:%~d0 当前路径:%cd% 当前执行命令行:%0 当前bat文件路径:%~dp0 当前bat文件短路径:%~sdp0 %ALLUSERSPROFILE% 本地 返回“所有用户”配置文件的位置。 %APPDATA% 本地 返回默认情况下应用程序存储数据的位置。 %CD% 本地 返回当前目录字符串。 %CMDCMDLINE% 本地 返回用来启动当前的 Cmd.exe 的准确命令行。 %CMDEXTVERSION% 系统 返回当前的“命令处理程序扩展”的版本号。 %COMPUTERNAME% 系统 返回计算机的名称。 %COMSPEC% 系统 返回命令行解释器可执行程序的准确路径。 %DATE% 系统 返回当前日期。使用与 date /t 命令相同的格式。由 Cmd.exe 生成。有关date 命令的详细信息,请参阅 Date。 %ERRORLEVEL% 系统 返回上一条命令的错误代码。通常用非零值表示错误。 %HOMEDRIVE% 系统 返回连接到用户主目录的本地工作站驱动器号。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。 %HOMEPATH% 系统 返回用户主目录的完整路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。 %HOMESHARE% 系统 返回用户的共享主目录的网络路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。 %LOGONSERVER% 本地 返回验证当前登录会话的域控制器的名称。 %NUMBER_OF_PROCESSORS% 系统 指定安装在计算机上的处理器的数目。 %OS% 系统 返回操作系统名称。Windows 2000 显示其操作系统为 Windows_NT。 %PATH% 系统 指定可执行文件的搜索路径。 %PATHEXT% 系统 返回操作系统认为可执行的文件扩展名的列表。 %PROCESSOR_ARCHITECTURE% 系统 返回处理器的芯片体系结构。值:x86 或 IA64 基于Itanium %PROCESSOR_IDENTFIER% 系统 返回处理器说明。 %PROCESSOR_LEVEL% 系统 返回计算机上安装的处理器的型号。 %PROCESSOR_REVISION% 系统 返回处理器的版本号。 %PROMPT% 本地 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。 %RANDOM% 系统 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。 %SYSTEMDRIVE% 系统 返回包含 Windows server operating system 根目录(即系统根目录)的驱动器。 %SYSTEMROOT% 系统 返回 Windows server operating system 根目录的位置。 %TEMP% 和 %TMP% 系统和用户 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP,而其他应用程序则需要 TMP。 %TIME% 系统 返回当前时间。使用与 time /t 命令相同的格式。由 Cmd.exe 生成。有关time 命令的详细信息,请参阅 Time。 %USERDOMAIN% 本地 返回包含用户帐户的域的名称。 %USERNAME% 本地 返回当前登录的用户的名称。 %USERPROFILE% 本地 返回当前用户的配置文件的位置。 %WINDIR% 系统 返回操作系统目录的位置。
4,win系统在安装linux之后显示时间慢了八个小时如何处理。
使命regedit打开如下注册表,添加QWORD,将key改为RealTimeIsUniversal值为1即可。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation 解释ubuntu等linux系统把从BIOS读取的时间认为是[全球统一时间],win认为是本地时间。
5,win下面命令行工具cmder修改终端提示符,定制自定义快捷命令。
以前通过修改C:\appwin\cmder_Full_Version_v1.2.9\cmder\vendor\init.bat的prompt生效 目前需要修改C:\appwin\cmder_v1.3.6\vendor\clink.lua的cmder_prompt变量才能生效 可以定制去掉换行,拉姆达修改为美元符号等等 通过配置文件C:\appwin\cmder_v1.3.6\config\user-aliases.cmd增加自定义简洁命令
6,win下面修改win格式文件
dism /Get-WimInfo /wimfile:F:\sources\boot.wim dism /Get-WimInfo /wimfile:F:\sources\install.wim # win 10 change Wim to Image witch is diff wint win7 #dism /Get-ImageInfo /ImagefileF:\sources\install.wim #Dism /Mount-Image /ImageFile:boot.wim /Index:2 /MountDir:windows dism /mount-wim /wimfile:F:\sources\boot.wim /index:2 /mountdir:windows dism /image:windows /add-driver:drivers /recurse dism /unmount-wim /mountdir:windows /commit dism /mount-wim /wimfile:F:\sources\install.wim /index:1 /mountdir:windows dism /image:windows /add-driver:drivers /recurse dism /unmount-wim /mountdir:windows /commit
7,cmder默认的命令,去掉换行符,提示符λ改成$
cmder\vendor\init.bat文件中第15行中{lamb}修改为$ 修改前:@prompt $E[1;32;40m$P$S{git}{hg}$S$_$E[1;30;40m{lamb}$S$E[0m 修改后:@prompt $E[1;32;40m$P$S{git}{hg} $$ $S$E[0m cmder\vendor\clink.lua文件中第41行中{lamb}修改为$ 修改前:local cmder_prompt = "\x1b[1;32;40m{cwd} {git}{hg} \n\x1b[1;30;40m{lamb} \x1b[0m" 修改后:local cmder_prompt = "\x1b[1;32;40m{cwd} {git}{hg} \n\x1b[1;30;40m$ \x1b[0m"