bat-任意截断替换字符

博客介绍了FOR /F命令的三种使用格式,包括从文件集、字符串、命令中读取内容。还说明了该命令的多个选项,如行注释结尾、忽略行数、分隔符集等。此外,给出了截断日期和时间返回字符的示例,以及用日期和时间建立指定格式目录的完整bat代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

optinos
eol=c           - 指一个行注释字符的结尾(就一个)//要忽略以什么字符开头的行
skip=n          - 指在文件开始时忽略的行数。
delims=xxx      - 指分隔符集。这个替换了空格和跳格键的//指定分割的字符列入delims=;:.使用了";",":","."做分隔
                  默认分隔符集。
tokens=x,y,m-n  - 指每行的哪一个符号被传递到每个迭代
                  的 for 本身。这会导致额外变量名称的分配。m-n
                  格式为一个范围。通过 nth 符号指定 mth。如果
                  符号字符串中的最后一个字符星号,
                  那么额外的变量将在最后一个符号解析之后
                  分配并接受行的保留文本。
usebackq        - 指定新语法已在下类情况中使用:
                  在作为命令执行一个后引号的字符串并且一个单
                  引号字符为文字字符串命令并允许在 filenameset
                  中使用双引号扩起文件名称。
列子
for /f "tokens=1-3 delims=:." %1 in ("%time%") do @echo %1-%2-%3
截断%time%返回的字符并替换
for /f "tokens=2 delims= " %1 in ("%date%") do @echo %1
截断%date%返回的字符

用%date%+%time%
建立目录
指定的格式
2004-10-12@12-11
分别是年-月-日@小时-分
for /f "tokens=2 delims= " %1 in ("%date%") do @set D=%1
for /f "tokens=1-3 delims=:." %1 in ("%time%") do @set T=%1-%2
mkdir "%D%@%T%"
完整的bat
-----------------------------------------
@echo off
setlocal
for /f "tokens=2 delims= " %%1 in ("%date%") do @set D=%%1
for /f "tokens=1-3 delims=:." %%1 in ("%time%") do @set T=%%1-%%2
mkdir "%D%@%T%"
endlocal
----------------------------------------

以下bat脚本没有按照预期工作,并且关于找不到文件的调试过于简单让我无法定位错误,原始文件和副本文件和和脚本文件位于同一个文件夹中,我需要你给我尽可能多的调试信息来定位重命名失败的错误 @echo off setlocal enabledelayedexpansion :: 获取当前文件夹名称 for %%i in ("%~dp0.") do set "folderName=%%~ni" :: 调试信息 echo 调试信息: echo. echo 1. 当前脚本的完整路径: %~dp0 echo 2. 提取的文件夹名称: !folderName! echo. :: 创建临时文件存储需要修改的文件列表 set "tempFile=%temp%\fileList.tmp" set "processedFile=%temp%\processedList.tmp" set "sortedTempFile=%temp%\sortedList.tmp" echo 临时文件路径: %tempFile% echo 处理后的文件列表路径: %processedFile% echo 排序后的临时文件路径: %sortedTempFile% echo. :: 找到所有带 "_副本" 的图片文件 for /f "delims=" %%i in ('dir /b /a-d *.jpg *.png *.gif *.bmp 2^>nul ^| findstr /i "_副本"') do ( echo %%i >> "%tempFile%" ) echo 检查是否存在副本文件... if not exist "%tempFile%" ( echo 当前文件夹中没有需要处理的副本文件。 pause exit /b ) echo 发现副本文件,正在处理... type "%tempFile%" echo. :: 处理副本文件,确保对应的原始文件存在 set "index=0" for /f "delims=" %%i in (%tempFile%) do ( set "copyFileName=%%i" set "originalFileName=!copyFileName:_副本=! " echo 正在处理: !copyFileName! echo 对应的原始文件: !originalFileName! :: 检查原始文件是否存在 if exist "!originalFileName!" ( echo !originalFileName! >> "%processedFile%" set /a index+=1 echo 原始文件存在,已添加到处理列表。 ) else ( echo 原始文件不存在,跳过。 ) echo. ) echo 检查是否有需要处理的文件对... if %index% equ 0 ( echo 没有找到对应的原始文件和副本文件对。 del "%tempFile%" pause exit /b ) echo 发现 %index% 个需要处理的文件对。 type "%processedFile%" echo. :: 从处理后的文件列表中提取文件名中的数字并排序(去掉文件类型后缀) set "numbers=" for /f "delims=" %%i in (%processedFile%) do ( :: 去掉文件类型后缀 set "fileNameWithoutExt=%%~ni" for /f "tokens=1 delims=_" %%a in ("!fileNameWithoutExt!") do ( set "fileNum=%%a" echo !fileNum! >> "%sortedTempFile%" ) ) :: 使用 sort 命令对数字进行排序 sort "%sortedTempFile%" /O "%sortedTempFile%" echo 提取的数字列表: type "%sortedTempFile%" echo. :: 生成新的文件名 set "n=1" for /f "delims=" %%i in (%sortedTempFile%) do ( set "fileNum=%%i" :: 查找对应的原始文件和副本文件 for /f "tokens=1* delims=_" %%a in ('dir /b /a-d %%i_*') do ( set "originalFile=%%a_%%b" set "copyFile=%%a_%%b_副本" if exist "!originalFile!" if exist "!copyFile!" ( set "newName=!folderName! (!n!)_%%b" echo 正在重命名: echo 原始文件: !originalFile! echo 副本文件: !copyFile! echo 新名称: !newName!_副本 echo. :: 重命名副本文件 ren "!copyFile!" "!newName!_副本" ren "!originalFile!" "!newName!" set /a n+=1 ) ) ) :: 删除临时文件 del "%tempFile%" del "%processedFile%" del "%sortedTempFile%" echo 文件重命名完成! pause 脚本的调试信息: 调试信息: 1. 当前脚本的完整路径: C:\Users\jiayi.wei\Desktop\GCST - 副本\ 2. 提取的文件夹名称: GCST - 副本 临时文件路径: C:\Users\jiayi.wei\AppData\Local\Temp\fileList.tmp 处理后的文件列表路径: C:\Users\jiayi.wei\AppData\Local\Temp\processedList.tmp 排序后的临时文件路径: C:\Users\jiayi.wei\AppData\Local\Temp\sortedList.tmp 检查是否存在副本文件... 发现副本文件,正在处理... 1234_副本.jpg 1235_副本.jpg 1236_副本.jpg 1237_副本.jpg 1238_副本.jpg 1239_副本.jpg 1249_副本.jpg 正在处理: 1234_副本.jpg 对应的原始文件: 1234.jpg 原始文件存在,已添加到处理列表。 正在处理: 1235_副本.jpg 对应的原始文件: 1235.jpg 原始文件存在,已添加到处理列表。 正在处理: 1236_副本.jpg 对应的原始文件: 1236.jpg 原始文件存在,已添加到处理列表。 正在处理: 1237_副本.jpg 对应的原始文件: 1237.jpg 原始文件存在,已添加到处理列表。 正在处理: 1238_副本.jpg 对应的原始文件: 1238.jpg 原始文件存在,已添加到处理列表。 正在处理: 1239_副本.jpg 对应的原始文件: 1239.jpg 原始文件存在,已添加到处理列表。 正在处理: 1249_副本.jpg 对应的原始文件: 1249.jpg 原始文件存在,已添加到处理列表。 检查是否有需要处理的文件对... 发现 7 个需要处理的文件对。 1234.jpg 1235.jpg 1236.jpg 1237.jpg 1238.jpg 1239.jpg 1249.jpg 提取的数字列表: 1234 1235 1236 1237 1238 1239 1249 找不到文件 找不到文件 找不到文件 找不到文件 找不到文件 找不到文件 找不到文件 文件重命名完成! 请按任意键继续. . . 优化代码,我的需求是: 我需要一个bat,使用方法是复制一份到文件夹中,在文件夹中双击使用,文件夹中的文件名称为四个数字或四个数字加'_副本',先找到所有名字中带'_副本'的文件,组成一个list,找到每一个文件的名字中不带'_副本'的文件名加入list, 这个list就是所有需要修改名字的文件清单,命名规则是: 将名字中的4位数字修改为'所在文件夹名字'+' '+'(n)' 其中,n为待修改清单中文件的名字转化为数字后升序的排序数字 1.修改逻辑只针对图片文件, 2.只有同时具备原始文件且具有副本文件的组合才进行改名操作
最新发布
04-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值