求助,如下,不胜感激
bat吧
全部回复
仅看楼主
level 1
小仓鼠吖~ 楼主
第一个问题,如何用BAT批量删除文件名前n个字符,比如说图中我要把每个文件的前25个字符都删掉,该怎么写BAT代码呢
第二个问题,图中前四个文件只需删24个字符,后面的需要删25个字符,如何同时做到
2025年01月13日 15点01分 1
level 1
小仓鼠吖~ 楼主
第二个问题相当于识别功能,比如说如果第4个字符是“_”,那就删除前24个字符,否则删25个,请问代码该怎么写[小乖]
2025年01月13日 15点01分 2
level 1
小仓鼠吖~ 楼主
图中的文件名都是.CSV
2025年01月13日 15点01分 3
level 3
# 获取所有文件对象
$files = Get-ChildItem -Path . -Filter *.csv
# 遍历文件对象
foreach($file in $files){
# 获取旧的文件名
$oldName = $file.BaseName
# 声明一个变量存放老的文件名
$newName = ""
# 判断文件名第四个字符是不是下划线
if($oldName[3] -eq "_"){
# 如果是下划线则删除文件名前24个字符
$newName = $oldName.Substring(24) + $file.Extension
}else{
# 如果不是下划线则删除文件名前25个字符
$newName = $oldName.Substring(25) + $file.Extension
}
# 重命名文件
Rename-Item -Path $file.FullName -NewName $newName
}
2025年01月14日 01点01分 4
谢谢大佬
2025年01月14日 02点01分
@小仓鼠吖~ 这是powershell代码,新建文本文件,把代码复制进去,把文件后缀名改为.ps1,鼠标右键点击,选择 以powershell运行。
2025年01月14日 02点01分
@baby阳阳122 好的,非常感谢大佬[哈哈]
2025年01月14日 02点01分
@小仓鼠吖~ 有任何问题jia wx : lk1179306749
2025年01月14日 02点01分
level 5
改了策略,只保留第2个_之后的文件名
@ echo off
for /f "tokens=1,2,* delims=_" %%a in ('dir /b *.csv') do ren %%a_%%b_%%c %%c
2025年01月16日 02点01分 5
谢谢大佬
2025年01月16日 08点01分
level 4
@echo off
setlocal enabledelayedexpansion
set "prefix_length=25"
for %%f in (*.png) do (
set "filename=%%f"
set "newname=!filename:~%prefix_length%!"
ren "%%f" "!newname!"
)
试试这个,可能兼容性不太好
2025年01月29日 16点01分 6
prefixlength是需要删掉的长度
2025年01月29日 16点01分
level 3
其实楼主的提问思路不对。观察楼主给的所有文件名其格式应该是
Ch数字_19个字符的日期和时间_其他字符
对比前四个文件前24个字符和剩余文件前25个字符可以发现需要删除的就是“Ch数字_19个字符的日期和时间_”这些字符,只需要保留“其他字符”即可。
所以问题就可以简化为保留第二个下划线后的文件名即可,代码如下:
```bat
@echo off
::变量延迟扩展开启
setlocal enabledelayedexpansion
::循环当前文件夹下的文件名
for %%f in (*) do (
::获取文件名
set "oldname=%%f"
set "newname="
::对文件名用_进行分割,%%a为第一个_到第二个_中间的内容,%%b为第二个_以后的所有内容
for /f "tokens=2,* delims=_" %%a in ("!oldname!") do (
set "newname=%%b"
)
:: 只有当newname不为空且与oldname不同时才重命名
if defined newname if not "!newname!"=="!oldname!" (
ren "!oldname!" "!newname!"
)
)
::变量延迟扩展关闭
endlocal
```
2025年09月12日 09点09分 8
1