一、简介
在使用批处理时,跟文件打交道的频率非常高,所以,这篇文章介绍一下“文件”的相关操作
二、文件存在检查
exist 文件名
@echo off
chcp 65001
setlocal enabledelayedexpansion:: 设置文件的路径
set "file=test1.hex":: 检查文件是否存在
if not exist "%file%" (echo !file!文件不存在.pause
)pauseendlocal
结果:
三、打印路径
既然要操作文件,那对文件的路径和文件名的操作,就是第一步。
@echo off
chcp 65001
setlocal enabledelayedexpansion:: 设置文件的路径
set "file=test.hex":: 检查文件是否存在
if not exist "%file%" (echo !file!文件不存在.pause
):: 绝对地址
set absolute_path=%~dp0!file!
echo 绝对地址:!absolute_path!:: 文件名
echo 文件名:!file!:: 其他文件打印
for %%f in (!file!) do (echo 文件名:%%fecho 绝对地址:%%~dpfecho 文件名称,无后缀:%%~nfecho 文件后缀:%%~xfecho 完整文件名:%%~nxfecho 无后缀路径:%%~dpnf
)
pauseendlocal
结果:
四、打印文件内容
type 文件名
见如下代码:
@echo off
chcp 65001
setlocal enabledelayedexpansion:: 设置文件的路径
set "file=test.hex":: 检查文件是否存在
if not exist "%file%" (echo !file!文件不存在.pause
):: 打印文件内容
type !file!
pauseendlocal
见结果:
在打开源文件看一下:
内容相同。
五、复制文件
copy 原文件 结果文件
@echo off
chcp 65001
setlocal enabledelayedexpansion:: 设置文件的路径
set "file=test.hex":: 检查文件是否存在
if not exist "%file%" (echo !file!文件不存在.pause
):: 获取文件名,无后缀
for %%f in (!file!) do (set file_name=%%~nf
):: 复制文件,并修改文件类型为txt
copy !file! !file_name!.txtpauseendlocal
结果:
并且在文件夹下,多了一个test.txt文件。
对比一下test.txt和test.hex文件。
完全一样。
六、逐行获取文件内容
for /f
@echo off
chcp 65001
setlocal enabledelayedexpansion:: 设置文件的路径
set "file=test.hex":: 检查文件是否存在
if not exist "%file%" (echo !file!文件不存在.pause
):: 逐行获取文件内容
set /a row=0
for /f %%f in (!file!) do (set /a row+=1echo 行:!row!,内容:%%f
)pauseendlocal
结果如下:
看一下源文件内容:
内容相同
七、文件重命名
ren 文件名 重命名文件名
@echo off
chcp 65001
setlocal enabledelayedexpansion:: 设置文件的路径
set "file=test.hex":: 检查文件是否存在
if not exist "%file%" (echo !file!文件不存在.pause
)::重命名文件
ren !file! renamed.hexpauseendlocal
结果
原来的test.hex文件已经被改成renamed.hex文件了。
八、删除文件
del 文件名
在当前文件夹里,有如下文件
调用如下函数:
@echo off
chcp 65001
setlocal enabledelayedexpansion:: 设置文件的路径
set "file=%~dp0test2.hex":: 检查文件是否存在
if not exist "%file%" (echo !file!文件不存在.pause
)::删除文件
del !file!pauseendlocal
结果:
没有报错,并且原来文件夹里的test2.hex已经没有了。
九、移动文件
move 路径/文件 路径/文件
如果移动的文件是当前文件夹的某一个文件,那么move将直接修改该文件。
@echo off
chcp 65001
setlocal enabledelayedexpansion:: 设置文件的路径
set "file=%~dp0test.hex":: 检查文件是否存在
if not exist "%file%" (echo !file!文件不存在.pause
)::移动文件
move !file! mov.txtpauseendlocal
运行前,文件夹内的文件如下:
运行后
原来test.hex文件直接被修改为mov.txt。
如果移动的是其他文件,则直接将该文件移动。(原目录下的文件将消失。)
例如,我们在当前文件夹下,再创建一个file的文件夹,并在该文件夹下创建一个test.txt文件。
调用如下代码:
@echo off
chcp 65001
setlocal enabledelayedexpansion:: 设置文件的路径
set "file=%~dp0\file\test.txt":: 检查文件是否存在
if not exist "%file%" (echo !file!文件不存在.pause
)::移动文件
move !file! %~dp0mov.txtpauseendlocal
结果:
可以看到,原文件夹下的test.txt文件已经没有了,而在当前目录下,多了一个mov.txt文件。
十、提取部分内容并输出到文件
这里有字符串相关的操作,不清楚的,参考如下文章:
Windows bat脚本学习四(字符串操作)_bat脚本 字符拼接空格-CSDN博客
见如下代码:
@echo off
chcp 65001
setlocal enabledelayedexpansion:: 设置文件的路径
set "file=%~dp0test.hex":: 检查文件是否存在
if not exist "%file%" (echo !file!文件不存在.pause
)::获取每行:后的数据
for /f "delims=:" %%a in (!file!) do ( set str=%%a:: 截取前5个字节set target_str=!str:~0,5!:: 输出内容到文件下,如果没有文件,则创建echo !target_str! >> target.txt
)pauseendlocal
运行后,在文件夹下多了一个target.txt文件。
输出的内容与hex的前5个字符相同。