使用批处理识别文件名上的模式


1

我有一个脚本,通过添加时间戳作为当前文件名的前缀来重命名文件。带有时间戳的文件如下所示:

20170407_1030.file1.txt

在处理完一些文件后,我在一个文件夹中运行此脚本。问题是,一旦文件的名称前面已经加上了时间戳,下次运行脚本时,它会预先设置文件名的另一个时间戳。相反,如果文件的名称中已经有一个时间戳,我想 更换 它带有更新的时间戳。

为此,我尝试识别已包含时间戳的文件名,如果是,请将其替换为更新的时间戳。

我目前执行此操作的脚本如下所示:

setlocal enabledelayedexpansion

for /f "delims=|" %%F in ('dir /b %cd%\*.*') do (
  set "MDate=%%~tF"
  set "Patern=*_*."
  set "TimeStamp=!MDate:~6,4!!MDate:~0,2!!MDate:~3,2!"
  ren "%%~nF%%~xF" "!TimeStamp!-%%~nF%%~xF" 
)
exit

编辑:抱歉没有提供更多详细信息。我一直在做一些研究,找不到匹配给定样本中掩码的方法。我知道如何替换预定义的模式或如何匹配掩码 ren *.png *.jpg


2
谢谢你告诉我们你想做什么。你有问题吗?如果你的问题是如何,请告诉我们你先尝试过的! :)这将有所帮助,所以我们不提供你已经尝试过的答案。如果你没有尝试任何事情,请准备好投票!但是,基本日志 可以 是期数。如果没有,那么你的问题就不清楚,因为你没有提供足够的细节。无论如何,直到你 编辑你的问题 我投票结束了。抱歉
Dave

1
此外,SuperUser不是一种“请写我脚本”的网站。分享您的研究,我们将帮助您弄清楚为什么事情不会按照他们的方式运作。
LPChip

添加了更多信息。
hailbreno

即使在编辑之后,你的“问题”仍然很明显。我不知道如何解释 “我想识别已包含时间戳的文件名然后更新它。”
dbenham

对不起,请看看它现在是否清晰:)
hailbreno

Answers:


2
@Echo off
Pushd "X:\path\to\workdir"

:: Get current date time 
For /f "delims=." %%A in (
  'wmic os get LocalDateTime^|findstr ^^[0-9]'
) do Set DT=%%A
Set "DT=%DT:~0,8%_%DT:~8,4%"

For /f "tokens=1* delims=." %%A in (
  'Dir /B/A-D "20*_*.*.txt"^|findstr "^20[0-9][0-9][01][0-9][0-3][0-9]_[0-2][0-9][0-5][0-9]\." '
) do Echo ren "%%A.%%B" "%DT%.%%B"

如果输出看起来正常,请删除最后一行中的回显。

样本输出:

> SU_1225592.cmd
ren "20170704_1656.File1.txt" "20170704_1700.File1.txt"
ren "20170704_1656.File2.txt" "20170704_1700.File2.txt"

编辑 只检查文件是否存在date_time模式
你可以使用这个只使用findstr返回的errorlevel的批处理
有条件地执行成功 && 或失败 || 不同的命令。

@Echo off
Set "Pattern=^20[0-9][0-9][01][0-9][0-3][0-9]_[0-2][0-9][0-5][0-9]\."
For %%A in ("%CD%\*") Do Echo:%%~nA|findstr "%Pattern%">NUL 2>&1 && (
    Echo found Pattern in %%~fA
) || (
    Echo No    Pattern in %%~fA
)

样本输出:

No    Pattern in A:\Copy+Archive.cmd
No    Pattern in A:\SU_1225592.cmd
found Pattern in A:\20170704_1656.File1.txt
found Pattern in A:\20170704_1656.File2.txt
No    Pattern in A:\tp010387.BAT

虽然这不是我想要的答案,但它让我直接找到了解决方案。谢谢。
hailbreno
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.