标题: [文件操作] 【已解决】BAT脚本如何批量重命名文件时带上文件夹名称? [打印本页]
作者: xzwcn 时间: 2020-6-12 21:40 标题: 【已解决】BAT脚本如何批量重命名文件时带上文件夹名称?
本帖最后由 xzwcn 于 2020-6-13 11:18 编辑
文件列表结构示例如下:
├─2013
│ ├─2013-07-08
│ │ .nomedia
│ │
│ ├─2013-07-09
│ │ .nomedia
│ │
│ ├─2013-07-10
│ │ .nomedia
│ │ 2013-07-10_call_15-59-28_OUT_371xx5.AMR
│ │ call_18-02-48_OUT_6xx3.AMR
│ │ call_18-05-22_IN_64xx43.AMR
│ │
│ ├─2013-07-17
│ │ .nomedia
│ │
│ ├─2013-07-18
│ │ .nomedia
│ │ call_12-29-35_OUT_1353xxx0711.AMR
│ │ call_21-00-55_IN_64xx30.AMR
│ │
│ ├─2013-07-22
│ │ .nomedia
│ │ call_13-55-24_IN_未知.AMR
│ │
│ ├─2013-07-23
│ │ .nomedia
│ │ call_21-35-49_IN_13xx774.AMR
要实现文件名增加前缀(取所在目录的文件名),如上面的文件:
call_18-02-48_OUT_6xx3.AMR 变成 : 2013-07-10_call_18-02-48_OUT_6xx3.AMR
作者: went 时间: 2020-6-12 23:04
放到你的2013文件夹下,确认没有问题就把echo去掉- @echo off
- for /r /d %%i in ("*") do (
- for %%a in ("%%i\*") do (
- echo rename "%%a " "%%~nxi_%%~nxa"
- )
- )
- pause&exit
复制代码
作者: Batcher 时间: 2020-6-13 08:25
回复 2# went
另外一个思路 - @echo off
- cd /d "%~dp0"
- for /f "delims=" %%i in ('dir /b /s /a-d *.AMR') do (
- for %%j in ("%%i\..") do (
- ren "%%i" "%%~nxj_%%~nxi"
- )
- )
复制代码
作者: xzwcn 时间: 2020-6-13 16:34
回复 2# went
你好,另外想请教一下,如果把文件夹名称改为文件修改时间,变量要如何调整?(:不能做为文件名的一部分,用空代替,如文件修改时间为:2020-06-12 16:34 ,改成:20200612_16:34)
作者: went 时间: 2020-6-13 19:06
回复 4# xzwcn
要看你是先改文件名还是先改文件夹名,顺序不一样,结果可能不一样
作者: xzwcn 时间: 2020-6-13 23:57
回复 5# went
只按文件最后修改时间(貌似我应该另外发个帖子 )
作者: went 时间: 2020-6-14 03:14
回复 6# xzwcn
确认无误,去掉echo,放到2013文件夹下,只处理一级文件夹- @echo off
- setlocal enabledelayedexpansion
- for /d %%i in ("*") do (
- set "times="
- for %%a in ("%%i\*") do set "times=%%~ta"
- if not "!times!"=="" (
- set "times=!times: =_!"
- set "times=!times:-=!"
- set "times=!times:/=!"
- set "times=!times::= !"
- echo rename "%%i" "!times!"
- )
- )
- pause&exit
复制代码
作者: xzwcn 时间: 2020-6-14 10:05
本帖最后由 xzwcn 于 2020-6-14 10:06 编辑
回复 7# went
不好意思,我表达者不够清晰,我要修改是文件名称,不是文件夹的,这个执行之后,文件夹名称变成了最后修改时间的。
例如我的文件结构如下:(执行dir的结果)
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2018/10/1 周一 17:56 93621 10月1日 17点56分.mp3
-a---- 2018/10/20 周六 10:04 1429001 10月20日 10点02分.mp3
我希望变成:
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2020/06/14 周日 10:06 93621 2018-10-01 周一 17:56_10月1日 17点56分.mp3
-a---- 2020/06/14 周日 10:06 1429001 2018-10-20 周六 10:04_10月20日 10点02分.mp3
周几是系统设置的时间格式,可以和这个不一样,只要是按修改时间添加到原文件名称前面的就可以。
作者: went 时间: 2020-6-14 11:50
回复 8# xzwcn - @echo off
- for /r %%i in ("*") do (
- if not "%%~i"=="%~0" (
- set "t=%%~ti"
- call set "t=%%t:/=-%%"
- call set "t=%%t:\=-%%"
- call set "t=%%t::=.%%"
- call echo rename "%%i" "%%t%%_%%~nxi"
- )
- )
- pause&exit
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |