批处理:批量重命名父文件夹下所有子文件夹里的文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了批处理:批量重命名父文件夹下所有子文件夹里的文件相关的知识,希望对你有一定的参考价值。

批处理:批量重命名父文件夹下所有子文件夹里的文件1.把父文件夹里的所有文件夹里面的图片进行重命名
2.因文件名当中含有如001-1此类命名的文件,如:000、000-1、001 改成000 、001、002
3.图片格式为tif和jpg
求具体代码……

1、找出需要整理的文件。

2、然后在空白位置新建一个txt文档,命名为“文件重命名”。

3、打开文本文档,并复制下面代码,保存,退出。

4、右键刚刚创建好的文本文档,修改扩展名为(.bat)。

5、保存好后双击它,出现DOS命令框,并能看到文件是按一定顺序排序显示的。

6、按照提示,按下任意键,就能看到文件按时间顺序从1升序重命名了所有文件,除了批处理文本自身。

注意事项:

批处理文件的扩展名为bat 。目前比较常见的批处理包含两类:DOS批处理和PS批处理。PS批处理是基于强大的图片编辑软件Photoshop的,用来批量处理图片的脚本;而DOS批处理则是基于DOS命令的,用来自动地批量地执行DOS命令以实现特定操作的脚本。

参考技术A

批量修改文件名,可同时添加多个文件夹中的文件,具体请往下看

步骤1,电脑下载优速文件批量重命名软件后双击安装打开,点击软件中间的大方框或者【添加文件】按钮,将需要修改名称的文件全部添加到软件中。

步骤2,随后在软件左边进行设置,命名方式选择“自定义”方式;然后在下一栏输入新的文件名;最后在下面进行编号(排序)设置,起始是第一个排序编号,增量是后一个编号增量的量,位数设置排序编号一共几位数(不够的话用0凑)。右边可以随时预览到新文件的名称。

步骤3,如果预览的新文件名没有问题,就点击【开始重命名】按钮启动批量修改程序。单弹出【重命名成功】的按钮,说明批处理完成。

步骤4,查看修改后的文件可以看到,新的文件名比之前更加的规范整齐,并且有数字排序。

参考技术B @echo off
setlocal enabledelayedexpansion

set pd="C:\\Users\\shanghai\\Desktop\\新建文件夹"
set key=*.tif *.jpg


set count=0
pushd %pd%
for /f "delims=" %%a in ('dir /a-d/b/s %key%') do (
    set /a count+=1
    call :format !count! 5 0
    echo [%%~nxa]^>^>[!strtmp!%%~xa ] [!count!]
    ren "%%~a" !strtmp!%%~xa 
)
pause&exit


::格式化序列 %1 = end ,%2 = end , %3=fill, ret = strtmp
:format
set _p=
set _num_1=%~1
set _num_2_len=%2

call :numlen !_num_1!
set _num_1_len=!numlen!
set /a _num_len=!_num_2_len!-!_num_1_len!

for /l %%a in (1,1,!_num_len!) do set _p=%3!_p!
set strtmp=!_p!%~1
goto :eof


::计算长度 pat=str,ret=numlen
:numlen
if %1 lss 10 set numlen=1&&goto :eof
if %1 lss 100 set numlen=2&&goto :eof
if %1 lss 1000 set numlen=3&&goto :eof
if %1 lss 10000 set numlen=4&&goto :eof
if %1 lss 100000 set numlen=5&&goto :eof
if %1 lss 1000000 set numlen=6&&goto :eof
set numlen=9
goto :eof

以前写别的代码改的,将就用吧。

追问

能不能简单点

本回答被提问者和网友采纳
参考技术C 这个问题可以用软件Replace Pioneer的批量重命名功能实现,详细步骤:
1. 由于当前版本2.65只支持搜索文件,不支持搜索目录,所以首先需要自己生成一个所有子目录的列表,假设父目录是c:\知道,这需要进到Dos提示符下,运行:
c:
cd \知道
dir /s/b /ad >list.txt
2. 打开Replace Pioneer的Tools->Batch Runner菜单,点击Import List按钮,把上一步生成的list.txt导入
3. 当前屏幕上列表中有Sequ, Input File和Output File三列,拖动水平滚动条,把右边的Input Directory一列显示出来,点击Input Directory列的抬头两次,使得目录名按照反序(v)排列(即保证子目录排在父目录前面),这步是必需的,否则父目录先改名后,子目录名字就不对了。
4. 选中Set output filename选项,把后面的$FILENAME改为:
#<replace(decode($sys_encoding,getcwd()),'.*?:|\/|\\\\','')>$FILENAME
以上公式是在文件名前面加目录(并把盘符和目录符号/去掉)
5. 观察output file一列新文件夹名是否正确,点击File Rename即可。
参考技术D 全选文件夹里的文件,然后重命名呀,全选后把鼠标放到第一个文件

如何使用 R 根据顺序父文件夹名称批量重命名许多文件

【中文标题】如何使用 R 根据顺序父文件夹名称批量重命名许多文件【英文标题】:How to use R to batch rename many files based on sequential parent folder names 【发布时间】:2022-01-15 13:19:53 【问题描述】:

我的理学硕士项目有 1 TB 的视频和相关文件,我正在尝试重命名 R 中的所有文件。每个摄像机的父文件夹-子文件夹布局如下:

相机 ID(例如,C00125) YYYY_MM DD HH(24 小时制) CameraID_HHMMSS_#15(文件名) DD DD DD YYYY_MM

在每个最终的子文件夹中,都有数量不定的文件,每个唯一的文件名都有 3 种不同的文件类型与之关联:AVI 文件、LBC 文件和 Wav 文件。因此,如果最终子文件夹只有 1 个视频(最多可以有 6 个视频),那么仍然会有 3 个文件,例如C00141_192000_#15、C00141_192000_#15.lbc 和 C00141_192000_#15。 LBC 文件在每个文件名的末尾都有一个文件扩展名“.lbc”。

我需要将每个 camera 中的所有文件编译到每个相机的 1 个文件夹中,但令人沮丧的是,我将拥有一堆基于 HHMMSS 的具有相同文件名的文件,而文件名将不指示每个文件实际关联的 YYYYMMDD。因此,我需要重命名每个文件,以便将相应的 YYYYMMDD 添加到已经具有 CameraID 和 HHMMSS 的当前文件名中。我能看到的最好方法是从每个文件的前 三个 父文件夹中获取 YYYYMMDD 信息(除非您可以以某种方式跳过 HH 子文件夹)。我不在乎我是否保留“_#15”。

理想情况下,这将产生文件名 C00141_2021_05_09_192000_#15(对于上述示例中的三种文件类型中的每一种)。 但考虑到子文件夹的性质,我可以使用 2021_05_09_19_C00141_192000_#15 之类的内容。真正重要的是文件名对其对应的 CameraID、YYYYMMDD 和 HHMMSS 是唯一的,并且一旦文件被重命名并合并在一起,文件就可以在文件资源管理器中按时间顺序排序。 p>

我查看了多个其他论坛,但答案对于帖子中的特定文件名过于专业,并且没有涉及多个子文件夹。我还研究了“批量重命名实用程序”Web 应用程序,它大致可以满足我的需要,但一次只有 1 个子文件夹,这对于我拥有的子文件夹数量(15 台相机 x 3 个月 x ~30 天 x 24 小时)

我已经为此苦苦挣扎了整整 2 天,但一直没有取得太大进展。在我弄清楚这一点之前,我的项目无法取得任何进展,所以我非常感谢任何帮助!我对 R 和编程比较陌生。

【问题讨论】:

这似乎不是很困难,但我不明白你想要的具体结果是什么。你能举一个最小的例子,包括原始目录结构和你最终想要的目录结构吗? 【参考方案1】:

我会这样做。这假设您的工作目录是包含所有“相机 ID(例如 C00125)”文件夹的文件夹。另外,我强烈建议您在执行此操作之前备份您的数据。为了安全起见,我在这里使用file.copy()file.rename() 可能更快...

您可以轻松地使用正则表达式根据文件路径将文件重命名为您想要的任何名称。如果您对此很挑剔,请告诉我,但根据您的问题,这没什么大不了的。我建议使用最简单的方法来确保视频名称保留尽可能多的信息。

无法保证这会奏效。首先对数据的一个子集进行试验。在尝试之前备份您的数据!

# Create new folder to move all video files into
new_dir <- "./new_dir"
dir.create(new_dir)

# Get all target files
old_names <- list.files(recursive=TRUE)
old_names
#> [1] C00125/YYYY_MM/DD/HH/CameraID_HHMMSS_#15.avi

# Rename files by reordering elements and replacing slashes
# with underscores
new_names <- gsub(
  pattern = "^(.*)/(.*)/(.*)/(.*)/(.*)$",
  replacement = "\\2_\\3_\\4_\\1_\\5",
  x = old_names)
new_names
#> [1] "YYYY_MM_DD_HH_C00125_CameraID_HHMMSS_#15.avi"

file.copy(from=old_names, to=paste0(new_dir, "/", new_names))
#> [1] TRUE

Created on 2021-12-11 by the reprex package (v2.0.1)

【讨论】:

非常感谢!它适用于我的示例子集。我最终将其更改为 pattern = "^(.*)/(.*)/(.*)/(.*)/(.*)$", replacement = "\\1_\\2_\\3_\ \5",因为我不需要文件名中的独立 'HH'。如果它足够简单,我将不胜感激知道如何从新名称格式“CameraID_YYYY_MM_DD_CameraID_HHMMSS_#15.avi”中删除第二个“CameraID”,以使其更易于阅读。如果您愿意展示给我看,将不胜感激。 当然!您可以对 gsub 使用更多模式匹配。例如,gsub(pattern = "_CameraID_", replacement = "", x = "CameraID_YYYY_MM_DD_CameraID_HHMMSS_#15.avi")。我强烈推荐学习正则表达式……它非常有用,对某些人来说,很有趣! regexcrossword.com 或者,一起:gsub(pattern = "^(.*)/(.*)/(.*)/(.*)/CameraID_(.*)$", replacement = "CameraID_\\1_\\2_\\3_\\5", x = old_names) 太棒了,谢谢!那么,我必须为每个相机文件夹单独执行此操作,因为它们都有唯一的相机 ID?或者有没有办法使用 gsub 来匹配相机名称的模式(因为它们都以 C00 开头,后跟 3 个数字和一个下划线),以便每个文件名都以唯一的相机 ID 开头?例如,是否能够将任何相机 ID 的 C00140/2021_05/19/20/C00140_204000_#15.avi 转换为 C00140_2021_05_19_204000_#15.avi,只需一组代码? 通过查看正则表达式字符,它是否会删除任何看起来像“C00....我试过这样的东西,但我无法让它工作

以上是关于批处理:批量重命名父文件夹下所有子文件夹里的文件的主要内容,如果未能解决你的问题,请参考以下文章

Bat批处理:批量重命名包含指定名称文件夹里的指定文件

DOS按规则批量重命名所有(子)目录下文件

bat批处理文件夹下所有子文件夹下最后一个的文件重命名?

如何使用 R 根据顺序父文件夹名称批量重命名许多文件

bat批量重命名文件(在子文件夹里)

批处理修改文件名