bat脚本、cmd命令

bat脚本

bat脚本就是DOS批处理脚本,就是将一系列DOS命令按照一定顺序排列而形成的集合,运行在windows命令行环境上。这个文件的每一行都是一条DOS命令

在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe来运行该文件。

bat入门案例

cmd.exe

在windows环境下,命令行程序为cmd.exe。打开方式。快捷键[ctrl+r]——》键入cmd

接着,随便输入“www”回车,如果提示 “.......不是内部或外部命令,也不是可运行的程序或批处理文件。”

 这是因为在环境变量Path里面没有添加此程序的执行文件,我们只有把程序的bin目录添加到Path变量里面就可以了

例如:右键“我的电脑-属性-高级-环境变量-path,

然后在其变量值后面添加“;程序安装目录/bin”(注:在添加目录前必须添加“;”号,而且此分号必须是英文格式的)。


rem、echo和pause

创建文件my.bat ,内容如下

echo 后加内容即输出该内容

:: 输出hello world
echo "hello world!"
pause

双击运行后效果如下:

pause:会暂停批处理的执行并在屏幕上显示Press any key to continue…

不加pause就会:双击运行批处理文件(xxx.bat),闪一下就消失

是因为批处理运bat行完成的时间很快,需要在运行完成后给添加暂停的命令

提示:pause 改为 pause>nul

可以不显示“请按任意键继续. . .”这些字,nul相当于空文件,把这些文字隐去了。

rem 注释符,也可以用两个冒号代替(::)

:: 注释内容
rem 注释内容

@echo off(关闭所有回显功能)

my.bat,在最开始加上@echo off

双击执行该bat文件,效果如下。就没有那些乱七八糟的 盘符路径命令本身呀。。。


窗口color与titile

  • title:设置控制台bat的标题
  • color:设置bat显示的背景和前景色

试着改动一下my.bat

color 02 0代表背景色,a代表字体颜色

@echo off
:: 设置窗口标题和颜色
title "bat批处理学习"
color 0a
echo "hello world!"
pause

双击执行该bat文件,效果如下

如果中文乱码,那么把bat文件的编辑改为ANSI格式


常用系统变量

%CD%  获取当前目录[盘符 + 路径]  
%PATH%  获取命令搜索路径
%DATE%  获取当前日期。
%TIME%  获得系统的当前时间
%RANDOM% 获取 0 和 32767 之间的任意十进制数字。
%ERRORLEVEL% 获取上一命令执行结果码

举例,在cmd窗口中输入 echo %CD%

系统变量在bat文件中使用,如:打印当前目录和系统临时文件夹目录。

修改bat文件如下:

@echo off
:: 设置窗口标题和颜色
title "bat批处理学习"
color 0a
echo "当前目录:"%CD%
echo "系统临时文件夹目录:"%TEMP%
pause

--------------------

假如你和我一样,也是乱码成这样。。。

 那么把bat文件的编辑改为ANSI格式就好了


管理员权限执行

如下所示,是一段以管理员权限往当前目录文本中添加内容的脚本:

@echo off
 
%1 mshta vbscript:CreateObject("WScript.Shell").Run("%~n0 ::",0,FALSE)(window.close)&&exit
 
echo %cd% > adminpermission.txt
echo %date% >> adminpermission.txt

这段脚本的意思,它会以管理员权限运行这段代码,并把当前目录写入adminpermission.txt文,然后写入当前的日期到adminpermission.txt。


%~dp0

这个命令表示当前批处理当前文件所在的目录。它包含了完整的路径

%0:

表示批处理文件本身,用绝对路径展示;

%~d0:

表示批处理文件所在的盘符;

%~p0:

表示批处理所在的目录;

%~dp0:

表示批处理文件所在的上级目录。


bat重定向运算

Handle句柄

  • 句柄是Windows程序中的概念,本质是一个4字节无符号整数值,用来标示不同实例。
  • 句柄是系统所管理的引用标识,该标识可以被系统重新定位到一个内存地址上。

在进程的地址空间中设一张表,表里头专门保存一些编号和由这个编号对应一个地址,而由那个地址去引用实际的对象,这个编号跟那个地址在数值上没有任何规律性的联系,纯粹是个映射而已。

在Windows系统中,这个编号就叫做"句柄"。


重定向运算>和>>和<

重定向:负责将指定命令或语句所产生的输入输出请求由缺省的“控制台”转交给其它的“设备”来完成,它的启动标志是“重定向符号”(包括“>,>>,<”三个)出现在句中。

>

将命令输出写入到文件或设备(例如打印机)中,而不是写在命令提示符窗口中。

<

从文件中而不是从键盘中读入命令输入。

>>

将命令输出追加到文件末尾而不删除文件中的信息。

dir>dirlist.txt

如果 dirlist.txt 不存在,cmd.exe 将创建该文件。如果 cirlist.txt 存在,cmd.exe 将使用 dir命令的输出替换文件中的信息。

@echo off
:: if-else结构学习
title "bat批处理学习"
color 0a
:: 设置变量v
dir>dirlist.txt
type dirlist.txt
pause

使用type是查看文件内容的 


管道运算

| 从一个命令中读取输出并将其写入另一个命令的输入中。也称作管道。


bat流程控制

批处理是一种简单的程序,可以用 if 和 goto 来控制流程,也可以使用 for 循环。

goto 命令 

流程跳转的含义是:改变默认的执行顺序,强制跳转到指定的位置执行特定的程序块。

goto [lable]  跳转到要执行的标签,在批处理中允许以“:XXX”来构建一个标号,然后用GOTO XXX跳转到标号:XXX处,然后执行标号后的命令

注意:

  • 标签名必须是常量,不能是变量
  • 标签必须单独一行,并且以冒号打头。

双击bat文件,结果如下:


if 命令

1.用“==” 判断字符串相等。

@echo off
title "bat批处理学习"
color 0a
set name=李四
::%name%是否等于"李四"
if "%name%"=="李四" (echo 你是李四) else echo 你不是李四
pause>nul

2、判断数值相等。

@echo off
title "bat批处理学习"
color 0a
set num1=15
set num2=18
:: 比较俩个数大于、等于、小于
if %num1% gtr %num2% echo %num1%大于%num2%
if %num1% EQU %num2% echo %num1%等于%num2%
if %num1% LSS %num2% echo %num1%小于%num2%
pause>nul

注意:比较运算符分为以下几种:

EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于

3、结合errorlevel使用

环境变量%ERRORLEVEL%包含上次执行的程序或脚本的返回码。会在执行成功时返回零,或者在执行失败时返回非零

@echo off
title "bat批处理学习"
color 0a
net user
if %ERRORLEVEL% EQU 0 echo net user 命令执行成功
pause>nul


for 命令入门使用

在批处理文件中:for %%i in (command1) do command2

for语句依次提取command1中的每一个元素,把它的值赋予形式变量i,带到do后的command2中参与命令的执行;

for语句的基本要素:

  1. for、in和do是for语句的关键字;
  2. %%i是for语句中对形式变量的引用;%%I和%%i会被认为不是同一个变量
  3. in之后,do之前的括号不能省略;
  4. command1表示字符串或变量,command2表示字符串、变量或命令语句;

for循环,后面的多个元素逗号分割(默认以空格,;三种符号分隔开)

@echo off
title "bat批处理学习"
color 0a
:: for命令测试
for %%i in (www,baidu,com) do echo %%i
pause>nul

执行结果

*.*,显示当前目录下所有的文件名 

@echo off
title "bat批处理学习"
color 0a
:: for命令测试
echo 显示当前目录下所有的文件名
for %%i in (*.*) do echo %%i
pause>nul

双击bat文件,执行结果

*.bat,显示当前目录下以.bat结尾的文件

@echo off
title "bat批处理学习"
color 0a
:: for命令测试
echo 显示当前目录下以.bat结尾的文件
for %%i in (*.bat) do echo %%i
pause>nul

双击bat文件,执行结果


for 命令参数扩展


start命令

启动单独的“命令提示符”窗口来运行指定程序或命令。

用法:可以打开盘符、文件、文件夹、网址、程序...

start打开盘符

@echo off
title "bat批处理学习"
color 0a
:: set命令测试
start e:
pause>nul

打开时,可以指定最大化、最小化

------------------------

start打开文件夹

:: 最小化方式打开文件夹
start /min e:\PR

最小化,就是可以在任务栏找到啦

------------------------

start打开文件

:: 打开文件
start c:\aow_drv.log

---------------------

start 打开网址

:: 使用默认浏览器打开网址
start https://mp.csdn.net

---------------------

start 打开应用程序

:: 打开应用程序
start D:\tools\IntelliJ IDEA 2019.2.2\bin\idea64.exe

额,可能会报错。是因为路径中有空格

可以这么用双引号,这么改

:: 打开应用程序
start D:\tools\"IntelliJ IDEA 2019.2.2"\bin\idea64.exe

call命令

从另一个批处理程序调用一个批处理程序,而不停止父批处理程序。 call 命令接受标签作为调用的目标。


attrib命令

如下,将21.xlsx的"只读"属性去掉

attrib -r 21.xlsx

什么时候会用到呢,比如去除hosts文件的只读属性,然后复制一份我们自己的hosts文件替换

attrib -R C:\Windows\System32\drivers\etc\hosts

set命令

set变量:变量设置值

最普通的set命令

@echo off
title "bat批处理学习"
color 0a
:: set命令测试
set name=小羽毛
:: 输出变量name的值
echo %name%
for %%i in (*.bat) do echo %%i
pause>nul

双击bat文件,执行结果 

set /p命令 ,让用户自己输入变量值

@echo off
title "bat批处理学习"
color 0a
:: set命令测试
set /p num=请输入一个数字:
echo 你输入的是:%num%
pause>nul

双击bat文件,会等待输入变量

 输入姓名之后,回车


/k与/c

 cmd /k 执行命令后不关闭dos窗体

 cmd /c 执行命令后 关闭dos窗体


Dos命令

文件夹和文件

cmd /c dir 是执行完dir命令后关闭命令窗口。

cmd /k dir 是执行完dir命令后不关闭命令窗口。

目录切换cd

只切换盘符,此时不需要cd ,直接"d:"字母大小写都可以。

格式:cd+空格+要切换的目录

结果就很尴尬了,,,为啥没切换成功呢?

 方法一:因为要先切换盘符啊

 方法二(推荐):

当然也可以在cd 和路径中间 增加一个'/d'

windows下路径分为:绝对路径和相对路径

绝对路径:在windows操作系统中凡是路径起点是盘符的都是绝对路径

相对路径:相对路径是相对于当前位置而言,以当前所在的位置作为起点。

切换到上级目录:cd ..

切换到根目录:cd \

目录的查看和复制

遍历当前路径下所有文件

dir

copy 路径\文件名 路径\文件名

copy 目录一   目录二

目录的创建和删除

mkdir [目录名] 新建目录

如:

mkdir test

创建多级目录?

rmdir [目录名]  目录删除

如:删除刚刚新建的test目录

rmdir test

强制删除,加 /s?


文件的创建和删除

文件删除

del 全路径

删除某一个目录下的所有文件

del  *.txt


文件重命名和移动

移动文件并重命名

文件重命名功能

move  1.txt test.txt

移动文件

move 


type查看文件内容


用户操作命令

查看用户

net user 查看所有的用户 

net user [用户名]  查看某个用户详细信息

新建用户

删除用户

net user admin /delete

网络命令

ping 命令

ping是一个测试程序,用于验证与远程计算机的连通性。ping 参数可以是ip地址,也可以是主机名或域名

ping

ping 本机ip",来查看网络协议TCP/IP是否正常

TTL起始值是一个2的乘方数(如32、64、128、256),起始值和返回值之间的差为经过的路由数

如下:64-50=14

输入“ping 网站地址”命令检查网络是否畅通

ping www.baidu.com -n 1

 -n 定义向目标 IP 发送数据包的次数,默认为4次。如果网络速度比较慢,4次对我们来说也浪费了不少时间,因为现在我们的目的仅仅是判断目标IP是否存在,那么就定义为一次吧

输入“ping 其它电脑ip”命令是否能连接局域网其它电脑

ping 10.100.100.104 -n 1


ipconfig命令

用“ipconfig”命令查看本机ip。


进程命令

查看端口占用

netstat -na

其中Local Address代表本机IP地址和打开的端口号(图中本机打开了8080端口),Foreign Address是远程计算机IP地址和端口号,State表明当前TCP的连接状态,图中LISTENING是监听状态,表明本机正在打开8080端口监听,等待远程电脑的连接。

测试8080端口有没有开放

telnet 127.0.0.1 8080

netstat -ano | findstr "端口号"

根据pid查看进程

“Tasklist”命令用来显示运行在本地或远程计算机上的所有进程的命令行工具

tasklist | findstr "Pid"

tasklist命令,就可显示本机的所有进程

本机的显示结果由五部分组成:映像名称(进程名)、PID、会话名、会话#、内存使用。

根据进程名杀死进程

 /F   指定要强行终止进程。

taskkill /f /t /im nginx.exe

(1)taskkill /im 后跟可执行文件名

(2)taskkill -pid 后跟进程ID


Windonws服务

1、服务管理

 services.msc     # 打开服务管理器

打开后,第一列就是服务显示名称

双击该行,可以拷贝真正的服务名称

 服务名称与显示名称的区别在于:服务名称是系统定义的,用于区别其他服务的标识;而显示名称是显示在services.msc里的名称,

查看服务名称与显示名称对应关系的方法

sc query state= all|findstr "SERVICE_NAME DISPLAY_NAME"


2、sc create

SC命令行 是用于与服务控制管理器和服务进行通信的命令行程序。

电脑系统开机,程序启动都有一个顺序,首先是操作系统的内核的启动,然后就是我们的系统服务启动,最后才到我们的普通应用程序启动。

命令sc,可以把一个普通程序创建成服务【在注册表和服务数据库中创建服务项】,用法:

sc create 服务名 binpath= “程序路径” start= auto displayname= “显示名”

注意: 等号和值之间需要一个空格。

sc start 服务名

sc stop 服务名


3、sc query

查询Windows服务:查看其状态和配置信息,包括服务名称、服务启动类型、服务状态等。

查询所有服务

sc query type= service state= all

查看某一个服务


4、sc delete

如果想要删除一个服务,用管理员打开命令行界面,在命令行中“输入sc delete 服务名”

sc delete elasticsearch-service-x64

5、注册redis服务

启动临时服务:

通过这个命令,会创建Redis临时服务,不会在window Service列表出现Redis服务名称和状态,此窗口关闭,服务会自动关闭。

redis-server.exe redis.windows.conf  

在文件目录下按住 shift + 鼠标右键,弹出的菜单选项中就会包含 在此处打开命令窗口,命令行直接就在当前目录

把redis设置成windows下的服务,

redis-server --service-install redis.windows-service.conf --loglevel verbose

几个参数说明:

  • –service-install 注册为windows服务
  • redis.windows-service.conf 配置文件
  • –loglevel verbose 日志级别 详细

操作步骤为:鼠标右键「任务栏」– 点击「任务管理器」— 选择「服务」选项— 点击下方「打开服务」按钮,打开服务窗口之后就可以找到 Redis 的服务

在重启电脑之后,就可以直接在命令行操作 Redis 服务了
基本命令:

开启服务 redis-server --service-start
关闭服务 redis-server --service-stop
卸载服务 redis-server --service-uninstall
服务重命名 redis-server --service-name server-nam


6、注册es服务

将ElasticSearch注册为Windows的服务,然后设置服务为自动启动

进入bin目录下执行:

elasticsearch-service.bat install

运行成功之后,打开系统的“服务”,找到刚刚安装的ElasticSearch的服务

右键-->属性-->启动类型设置为自动-->确定 。如此一来,下次开机时,ES就会自己启动了。

最后的最后,访问一下 localhost:9200试一下吧~

elasticsearch-service.bat后面还可以执行这些命令

  • install: 安装Elasticsearch服务
  • remove: 删除已安装的Elasticsearch服务(如果启动则停止服务)
  • start: 启动Elasticsearch服务(如果已安装)
  • stop: 停止服务(如果启动)
  • manager:启动GUI来管理已安装的服务
elasticsearch-service.bat start

....好好好,事情果然不简单

elasticsearh从7.0开始默认安装了java运行环境,以便在没有安装java运行环境的机器上运行。如果配置了环境变量JAVA_HOME,则elasticsearh启动时会使用JAVA_HOME作为java路径,否则使用elasticsearh根目录下jdk目录为java路径。

当JAVA_HOME配置的java版本不满足需求时,可以修改elasticsearh的bin/elasticsearch-env.bat,就可以使用自带jdk版本

打开 elasticsearch-env.bat文件,如下是原有的配置,

if "%JAVA_HOME%" == "" (
  set JAVA="%ES_HOME%\jdk\bin\java.exe"
  set JAVA_HOME="%ES_HOME%\jdk"
  set JAVA_TYPE=bundled jdk
) else (
  set JAVA="%JAVA_HOME%\bin\java.exe"
  set JAVA_TYPE=JAVA_HOME
)

接下来要在原有的基础上做点小改造:

在文件中将if "%JAVA_HOME%" == "" (和它后面的else整个内容注释掉(es的配置中在每行的前面加rem),然后将if中的内容提取出来就好了

我没使用rem注释,是直接删除那些不需要保留的行,修改成

set JAVA="%ES_HOME%\jdk\bin\java.exe"
set JAVA_HOME="%ES_HOME%\jdk"
set JAVA_TYPE=bundled jdk

使用elasticsearch-service.bat remove命令删除刚刚安装的es服务,重新安装服务并启动就成功了


7、elasticsearch.yml 

#cluster.name: my-application
cluster.initial_master_nodes: node-1

node.name: node-1

network.host: 0.0.0.0

discovery.seed_hosts: ["host1"]

xpack.security.enabled: false
  1. cluster.name:集群名称。
  2. node.name:节点名称,建议设置一个有意义的名称。
  3. node.master:是否允许该节点被选为主节点,默认为true。
  4. node.data:是否允许该节点存储数据,默认为true。
  5. path.data:数据文件存储路径,可以是多个路径,以逗号分隔。
  6. path.logs:日志文件存储路径。
  7. bootstrap.memory_lock:设置为true时,ES将在启动时锁定JVM内存,防止交换,提高性能。
  8. network.host:节点绑定的IP地址或主机名,默认为0.0.0.0,表示绑定所有可用的网络接口。
  9. http.port:HTTP API监听的端口,默认为9200。
  10. discovery.seed_hosts:可以被选为主节点的初始节点列表,建议至少有两个节点。
  11. cluster.initial_master_nodes:用于在初始化期间指定可被选为主节点的节点列表,建议与discovery.seed_hosts一致。
  12. action.destructive_requires_name:设置为true时,执行具有破坏性的操作(如删除索引)时需要显式指定名称。
  13. indices.query.bool.max_clause_count:查询中允许的最大布尔子句数。
  14. thread_pool.write.queue_size:写线程池中等待执行的任务队列大小。
  15. index.number_of_shards:每个索引的分片数。
  16. index.number_of_replicas:每个分片的副本数,默认为1。
  17. index.refresh_interval:索引刷新间隔时间,默认为1s,可提高索引性能但会降低写入速度。
  18. index.max_result_window:搜索结果的最大窗口大小,默认为10000,可设置更大的值以支持更大的分页结果。
  19. index.max_inner_result_window:嵌套字段搜索结果的最大窗口大小,默认为100,可设置更大的值以支持更大的嵌套分页结果。
  20. index.mapping.total_fields.limit:索引映射中允许的最大字段数,默认为1000。
  21. index.mapping.depth.limit:索引映射中允许的最大嵌套深度,默认为20。
  22. search.max_buckets:聚合搜索中允许的最大桶数,默认为10000。
  23. http.max_content_length:HTTP请求正文的最大长度,默认为100MB。
  24. xpack.security.enabled:启用xpack安全功能,默认为false,需要付费订阅才能使用。

其他

注册表

注册表查看

注册表是windows系统的数据库,保存着硬件、系统和软件正常运行的各种配置参数,修改注册表很容易造成系统崩溃,注册表的重要性不言而喻。注册表保存在系统的多个文件中,大部分保存在C:\Windows\System32\config中,如DEFAULT,DRIVERS,SAM,SECURITY,SOFTWARE,SYSTEM,userdiff等。

数据库文件是二进制文件,无法直接编辑,需要使用注册表编辑器,编辑器位置在C:\Windows\regedit.exe,

win+r后,

regedit------打开注册表


5个HKEY根键

注册表是一个树状分层的数据库,它有5个HKEY根键(H是handle句柄的意思)

HKEY_CLASSES_ROOT,提取自HKEY_LOCAL_MACHINE\SOFTWARE\Classes目录,保存着文件的分类信息,包括文件扩展名,默认启动程序,程序和文件的图标,文件右键菜单功能等。

HKEY_CURRENT_USER,包含当前登录用户的配置信息,提取自HKEY_USERS。

HKEY_LOCAL_MACHINE,注册表的核心项,注册表的大部分软硬件和系统配置信息都保存在这里。

HKEY_USERS,包含计算机上所有用户的配置文件的根目录。创建的新用户会根据这里的.DEFAULT配置信息生成自己的配置文件。

HKEY_CURRENT_CONFIG,包含本地计算机在系统启动时所用的硬件配置文件信息,实际上是从两个注册表项创建而来的,即HKEY_LOCAL_MACHINE\System和HKEY_LOCAL_MACHINE\Software。因为是动态创建的,所以修改它的内容没有什么实际意义。


win + r

1、管理员运行win+r

开启任务管理器选择 文件->运行新任务

弹出新建任务窗口,输入cmd,勾选以系统管理权限创建此任务


2、win+r 打开程序

taskmgr

win+r后,

taskmgr------打开控制任务管理器

control命令

win+r后,

control------打开控制面板

notepad

win+r后,

notepad------打开记事本


3、win+r查看系统信息

msinfo32:打开系统信息

winver---------检查Windows版本


4、远程桌面连接

在桌面同时按住win+r打开运行,输入 mstsc

在 计算机 位置输入 被控制端的ip地址,点击连接即可,会弹出对话框

 用户名和密码必需输入被控制电脑的系统管理员,即可实现连接


Java中调用

如果执行的命令是一个完整的命令,不需要传参,可以直接使用exec(java.lang.String)

如果执行的命令需要传递参数,则需要使用exec(java.lang.String[])

    public static void main(String[] args) {
        cmdExec("winver");
    }

    //执行CMD命令,如连接U盾
   static String cmdExec(String command) {
        StringBuilder sb = new StringBuilder();
        try {
            System.out.println("command:" + command);
            Runtime runtime = Runtime.getRuntime();
            Process process = runtime.exec(command);

            // 读取命令执行结果
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
                sb.append(line);
            }
            // 等待命令执行完成
            process.waitFor();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            return sb.toString();
        }
    }

系统进程

svchost.exe

svchost.exe用于执行dll文件

微软将所有Windows系统内部的功能移到 .dll 文件中, 从而取代以前的 .exe 文件.

从编程角度来看这这样做有利于复用...但问题是你不能直接从Windows系统中运行一个 .dll 文件, 必须由一个可执行文件加载它, 所以 svchost.exe 就这样产生的.


explorer.exe

explorer负责了任务栏,开始菜单,桌面的显示,同时也是文件管理器,删除该程序会导致windows图形界面无法使用

<think>好的,用户想学习批处理文件(.bat)的基础知识,需要入门教程、基础语法和示例。首先,我得回忆一下批处理的基本概念和常用命令。根据提供的引用资料,用户可能对echo、@、pause等基础命令感兴趣,还有文件操作、循环结构、变量设置等内容。 首先,我需要整理一个清晰的入门教程结构。可能分为简介、常用命令、语法结构、示例等部分。用户提到的引用中有关于echo、@、pause、注释、重定向符、参数处理、set命令、循环和条件语句等内容,这些都是基础中的重点。 然后,要确保使用中文回答,并且按照系统指令,所有行内数学表达式用$...$,但批处理可能涉及较少数学内容,不过如果有变量或路径,可能需要正确使用格式。例如,像%~dp0这样的变量需要用代码块标出。 接下来,生成相关问题。用户提供的示例中,快速排序部分有三个问题,这里也需要类似数量的问题,可能涉及批处理的应用场景、常见错误处理、高级命令等。 需要注意引用标注,每个引用在回答末尾自然添加,比如在讲解for循环时提到使用usebackq选项,可以引用[^4]。同时,要检查每个引用的内容是否准确对应到回答中的部分。 另外,用户可能对实际示例感兴趣,比如如何读取文件、处理参数、使用条件判断等。根据引用中的代码示例,可以构造一些简单的例子,如显示Hello World,使用for循环遍历文件,处理参数等。 还要注意批处理文件的注释方式,使用rem或::,以及如何避免中文乱码的问题,比如chcp 65001和保存为UTF-8格式,这在引用[4]中提到过,需要包含在回答中。 最后,确保回答结构清晰,分步骤介绍,每个部分有相应的示例代码,并正确引用来源。可能还需要提醒用户注意批处理的局限性,比如不适合复杂任务,但在自动化简单操作上非常高效。</think>### 批处理文件(.bat)入门教程 #### 一、批处理简介 批处理文件是Windows系统中用于批量执行命令脚本文件,扩展名为`.bat`或`.cmd`。它通过逐行解析命令实现自动化操作,常用于文件管理、系统配置等场景[^1]。 --- #### 二、基础语法与命令 1. **基本命令** - `echo`:显示文本内容 ```bat echo Hello World ``` - `@`:关闭当前命令的回显 ```bat @echo off :: 关闭所有命令回显 ``` - `pause`:暂停执行并显示"按任意键继续..." ```bat pause >nul :: 静默暂停 ``` 2. **注释** - 使用`rem`或`::`添加注释 ```bat rem 这是一条注释 :: 这也是注释(需注意不能以中文结尾) ``` 3. **重定向符** - `>` 覆盖写入文件 - `>>` 追加写入文件 ```bat echo 内容 > 1.txt echo 追加内容 >> 1.txt ``` 4. **变量操作** - `set` 定义变量 ```bat set name=John echo %name% ``` - `%0` 表示当前批处理文件路径,`%~dp0` 获取当前脚本所在磁盘路径 ```bat echo 当前路径:%~dp0 ``` --- #### 三、流程控制 1. **条件语句(if)** ```bat @echo off set var=10 if %var% == 10 ( echo 变量等于10 ) else ( echo 变量不等于10 ) ``` 2. **循环语句(for)** - 遍历文件 ```bat for %%c in (*.bat *.txt) do type %%c [^2] ``` - 按分隔符拆分文本 ```bat for /f "usebackq delims=, tokens=1,2" %%i in ("data.csv") do ( echo 第一列:%%i,第二列:%%j ) [^4] ``` --- #### 四、实用示例 **示例1:批量重命名文件** ```bat @echo off setlocal enabledelayedexpansion set count=1 for %%f in (*.txt) do ( ren "%%f" "doc!count!.txt" set /a count+=1 ) pause ``` **示例2:读取文件内容(解决中文乱码)** ```bat @echo off chcp 65001 :: 设置UTF-8编码 for /f "usebackq skip=1 tokens=1-3" %%i in ("data.txt") do ( echo 姓名:%%i,年龄:%%j,城市:%%k ) pause ``` --- #### 五、注意事项 1. 避免在注释中使用中文字符结尾,可能引发解析错误 2. 使用`setlocal/endlocal`限制变量作用域 ```bat setlocal set var=局部变量 endlocal ``` 3. 调用外部程序使用`start`或`call`命令 ```bat start notepad.exe :: 新窗口打开记事本 call other.bat :: 调用另一个批处理文件 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值