admin 管理员组文章数量: 888136
变量
创建自定义变量
REM 设置变量
set var1=value1
REM 打印变量
echo %var1%
MS-DOS的内置环境变量
// 使用set /? 查看
--- // 执行程序后返回值
errorlevel
eg: if %errorlevel% EQU 0 (echo succeeded) else (echo failed)
eg: if %errorlevel% NEQ 0 (echo failed) else (echo succeeded)
--- // call调用bat 传入第一、二等等参数
%1 %2 ... %9
eg: call ".\Demo.bat" string1 string2 ---Demo.bat--> if not "%1"=="string1" echo %1
--- // call调用bat 传入第一、二等等参数,当参数以引号开头时,%~1会自动将引号删除。
%~1 %~2 ...
--- // 当前日期和时间
date time ...
eg: echo %date% %time%
--- // 当前目录
cd
eg: echo %cd%
其他系统变量
# 只可以用在批处理文件中,表示所在的批处理文件的目录
%~dp0
# 执行脚本文件名
%~n0
# 执行脚本文件名(加后缀)
%~nx0
命令
查看命令列表 help
查看命令帮助 /? 例如:set /?
注释 rem或者::开头
常用命令
# 查看所有环境变量,相当于linux下的env
set
# // set 显示、设置或删除 cmd.exe 环境变量
set var
set /p var=输入变量值
set var=
# // findstr 在文件中寻找字符串
findstr /i call startup.bat
--- // 切换目录
cd /d d:
# // type 显示文本文件内容,与findstr结合使用
type startup.bat | findstr call
# // start 启动一个单独的窗口以运行指定的程序或命令
start iexplore www.baidu
--- // call 从批处理程序调用另一个批处理程序。
call startup.bat
# // pushd 保存当前目录以供 POPD 命令使用,然后改到指定的目录。
pushd d:\
# // popd 更改到 PUSHD 命令存储的目录
popd
# // md和mkdir 创建文件夹
md test1 test2
md "test1 test2"
# // rd和rmdir 删除文件夹
rd test1 test2
rd "test1 test2"
rd /s /q test1
# // 重命名
ren src.txt dst.txt
rename src.txt dst.txt
# // 显示目录中的文件和子目录列表
dir /b
# // 移动文件并重命名文件和目录
move d:\test1 test2 // test2不存在时,移动test1到当前目录,并保存为test2
move d:\test1 test2 // test2存在时,移动test1到test2中,作为test2的子目录
# 复制
# xcopy 复制/e复制目录和子目录包括空目录 /s复制目录和子目录bu包括空目录
copy /y <src> <dst>
xcopy /e /y <src> <dst>
# 属性 查看文件和文件夹属性 去掉隐藏属性 增加只读和隐藏属性
attrib /D
attrib -h dst.txt
attrib +r +h dst.txt
# // 开始批处理文件中环境改动的本地化操作。在执行SETLOCAL之后所做的环境改动只限于批处理文件。
# // 要还原原先的设置,必须执行ENDLOCAL。达到批处理文件结尾时,
# // 对于该批处理文件的每个尚未执行的 SETLOCAL 命令,都会有一个隐含的 ENDLOCAL 被执行。
setlocal
endlocal
# // 暂停批处理
pause>nul
# // 退出 /b退出批处理而不是命令行
exit /b 1
不常用命令
--- // assoc 显示或修改文件扩展名关联
--- // 显示当前文件关联 比如:.7z=WinRAR
assoc
assoc .7z
--- // 显示活动代码页编号和指定代码页编号 简体中文936 MS-DOS美国英语437 UTF-8 65001
chcp
--- // choice 该工具允许用户从选择列表选择一个项目并返回所选项目的索引。
--- // /c 选项列表,如 /c yn
--- // /n 隐藏选项列表
--- // /cs 区分大小写
--- // /t 指定超时时间,超过时间选择默认选项
--- // /d 制定默认选项
--- // /m 显示提示
choice /c yn /d y /t 10
# 命令行相关 F7按键
doskey /history
# 删除一个或多个文件,同del
# 删除目录和子目录下文件/s
# 强制删除只读文件/f
erase *.obj
erase /s /q dir
del /f /s /q *.obj
# 重命名
ren gitignore.txt .gitignore
# 显示目录结构 仅显示包含文件夹和显示所有文件的树形结构
tree
tree /f
控制语句
分支控制if
--- // defined
if defined var1 echo var1定义
if not defined var2 echo var2未定义
--- // exist
if exist filename echo filename文件存在
if not exist filename echo filename文件不存在
--- // errorlevel
if errorlevel 0 echo 执行成功
--- // 遍历启动参数
:round
echo %1
shift
goto round
循环控制for
# 空 /d /r /f /l
# ps: 循环前注意查看当前目录(echo %CD%),%%i和%i有可能调整
--- // 显示当前目录下所有包含有.bat和.txt的文件名
for %%c in (*.bat *.txt) do (echo %%c)
--- // 显示当前目录下所有包含有e或者i的目录名
for /d %%a in (*e* *i*) do echo %%a
--- // 遍历E盘test目录下所有文件
for /r E:\test %%b in (*) do echo %%b
--- // 执行dir列举隐藏文件和文件目录,之列举目录dir /AHD /B
for /f %%i in ('dir /AH /B') do (
echo %%i)
--- // 执行6次循环
for %%i in (1 2 3 4 5 6) do echo %%i
for /l %%i in (1,1,6) do echo %%i
--- // 遍历参数 待确认
for %a in (%*) do echo %a
--- // 1 -> 将从集合中取出元素当成文件名,并打开以每行当成一个循环单元(以非空格开头,空格截断)
--- // 2 -> 取每行元素
--- // 3 -> tokens表示第几个元素,与%%x对应,*代表整行
--- // 比如tokens=1,3,4 %%i %%j %%k 分别对于从行取出的第一、三、四个
--- // 4 -> delims 表示分隔符,例子中表示空格作为分隔符
--- // skip表示忽略文件前多少行
--- // 5 -> eol 表示忽略指示的行
for /f %%i in (1.txt) do echo %%i
for /f "tokens=* delims= " %%i in (1.txt) do echo %%i
for /f "tokens=1,3,4 delims= " %%i in (1.txt) do (echo %%i %%j %%k)
for /f "skip=1 tokens=* delims= " %%i in (1.txt) do echo %%i
for /f "eol=- tokens=* delims= " %%i in (1.txt) do echo %%i
常用for命令
FOR %variable IN (set) DO command [command-parameters]
FOR /D %variable IN (set) DO command [command-parameters]
FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
FOR /L %variable IN (start,step,end) DO command [command-parameters]
常用脚本
创建写法
# 启动文件管理器
start explorer.exe C:\Users\ws\Desktop
# 列举进程 查找指定进程
tasklist
tasklist | findstr /i "*.exe"
# 关闭进程(/t 同时终止启动的子进程 /f 强制终止进程 /im 进程名)
taskkill /pid 2560 /t /f
taskkill /im iexplore.exe
# 获取运行目录,脚本目录,上级目录
set run_dir=%cd%
set build_dir=%~dp0
cd /d %build_dir%\..
set root_dir=%cd%
cd /d %run_dir%
# 检测进程,并关闭进程
tasklist | findstr /i "TestApp.exe"
if %errorlevel% EQU 0 (taskkill /f /im "TestApp.exe")
# 延时5秒
choice /t 5 /d y /n >nul
常见例子
@echo off
echo start clean ...
rem clean *converted.pcm files
for /r %cd% %%f in (*converted.pcm) do (
echo delete %%f
del %%f )
rem clean *out.pcm files
for /r %cd% %%f in (*out.pcm) do (
echo %%f
del %%f )
rem clean *out.pcm files
for /r %cd% %%f in (*converted?_out_converted.aac) do (
echo %%f
del %%f )
echo done
pause>nul
文件或文件夹信息获取
@echo off
for %%i in (*.txt) do (
echo %%i
echo %%~fi
echo %%~di
echo %%~pi
echo %%~ni
echo %%~xi
echo %%~ti
echo %%~zi)
# %%~fi:表示获取该文件的绝对路径信息
# %%~di:表示获取该文件所在的盘符
# %%~pi:表示获取该文件的路径,不包含盘符的信息
# %%~ni:表示获取该文件的文件名,不包含扩展名信息
# %%~xi:表示获取该文件的扩展名
# %%~ti:表示获取该文件的上次修改时间
# %%~zi:表示获取该文件的大小
函数调用
@echo off
set runtime_dir=%cd%
set script_dir=%~dp0
if EXIST ffmpeg_local set source_local_dir=%cd%\ffmpeg_local\source
rem 调用copy_header_file函数
if defined source_local_dir (
pushd %source_local_dir%\..
call:copy_header_file %source_local_dir% "paramter2" 300
popd
)
pause
rem 定义copy_header_file函数
:copy_header_file
echo %~1 %~2 %~3
goto:eof
参考
Bat 批处理之 for/f 详解
版权声明:本文标题:Windows系统Shell脚本 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1735735179h1748139.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论