批处理文件重命名(时间戳删除)
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
,以便它只重命名包含下划线的文件。以上是关于批处理文件重命名(时间戳删除)的主要内容,如果未能解决你的问题,请参考以下文章