批处理文件重命名(时间戳删除)

Posted

技术标签:

【中文标题】批处理文件重命名(时间戳删除)【英文标题】:Batch File Rename(Timestamp removal) 【发布时间】:2014-12-17 07:25:02 【问题描述】:

我做了一些研究,但没有找到太多,我发现我无法开始工作。这是我在 *** 上找到的一件事。 cmd - batch file rename - Stack Overflow

我使用大炮复印机将文件扫描到网络驱动器上的文件夹中。我在扫描文件之前命名文件,复印机在文件末尾放置一个时间戳,看起来像“_20141021165008”,我想在文件发送到计算机时删除时间戳。这些文件被扫描到三个位置之一,我想让他们每个人都做同样的事情。

这是从复印机出来的样子:

001-Bob_(1-100)_20141021165008
002-Bob_(1-25)_20141021170515
1-67676_Ex.Sheets_20141021172043

这就是我希望它们看起来的样子:

001-Bob_(1-100)
002-Bob_(1-25)
1-67676_Ex.Sheets

此外,名称和数字一直在变化。 我有它,所以文件扩展名不可见。但是文件是 99.9% 的时间 .PDF

我想做的是:

当文件到达文件夹时自动删除时间戳。 不要多次重命名文件,以免丢失任何文件名。

我有一个批处理文件,它删除了文件名的最后 12 个字符,我为它创建了一个快捷方式并使用了键盘快捷方式,但它并非对所有内容都有效,不是完全自动化的,我必须重置每隔几天的快捷方式,因为它只是停止工作......

运行 Win7 Pro 64x

感谢任何提供帮助的人!

【问题讨论】:

【参考方案1】:
for /f "tokens=1-3* delims=_" %A in ('dir /b *_*_*.*') do ren "%A_%B_%C%D" "%A_%B%D"

这会读取 dir 命令的输出。它不适用于具有两个以上下划线的文件。如果你需要,就这么说吧。在批处理文件中将 %A 等更改为 %%A。

【讨论】:

【参考方案2】:
@echo off

setlocal
set "target_folder=c:\some_dir"
pushd "%target_folder%" 2>nul

rem  --Remove comments in case of network drive.
rem net use h: %target_folder%
rem pushd h:

setlocal enableDelayedExpansion
for %%a in (*_2014*) do (
    set filename=%%~na
    set newname=!filename:~0,-14!
    rem --Remove the echo if the new file name is OK
    echo ren "%%~nxa" "!newname!%%~xa"

)
endlocal
endlocal

【讨论】:

【参考方案3】:

几乎,但不完全符合您的要求。并且该命令可以根据需要运行多次,而不会更改已重命名的文件的名称。

ren *_*.pdf *_.pdf

上述命令将根据您在问题中列出的文件给出以下结果:

001-Bob_(1-100)_20141021165008.pdf    -->  001-Bob_(1-100)_.pdf
002-Bob_(1-25)_20141021170515.pdf     -->  002-Bob_(1-25)_.pdf
1-67676_Ex.Sheets_20141021172043.pdf  -->  1-67676_Ex.Sheets_.pdf

请参阅How does the Windows RENAME command interpret wildcards?,了解上述命令为何起作用。

【讨论】:

ren 的这种行为记录在哪里? +1。给我的消息,所以我显然需要查看当前的命令集。 @Cheersandhth.-Alf - 请参阅更新答案中的链接。据我所知,MicroSoft 没有正确记录该行为。我进行了一系列实验来对行为进行逆向工程。 @CareyGregory - 查看 Microsoft 文档不会有太大帮助。您应该查看更新答案中的链接。 EDIT - 将源掩码更改为*_*.pdf,以便它只重命名包含下划线的文件。

以上是关于批处理文件重命名(时间戳删除)的主要内容,如果未能解决你的问题,请参考以下文章

批处理修改文件名

批处理如何去掉/删除文件名中的指定字符

java对文本文件进行操作:读取修改添加删除重命名等

移动文件并使用时间戳日期重命名的脚本

BigQuery 加载 JSON 文件:如何忽略或重命名字段?

bat批处理:根据文本文件批量重命名文件