StackOverflow(发布)新手,不是新手,无数次拯救我。不幸的是,这次我无法找到指出正确方向的信息。
我每天收到一个包含多个文件名的zip文件。我需要一种方法,每天使用现有文件名的一部分和当前日期重命名每个文件。因此文件将来自:
示例 -
thisisjust_atest.pdf
another_test.pdf
just_anothertest.pdf
yayone_moretest.pdf
到
atest - 2018-02-13.pdf
test - 2018-02-13.pdf
anothertest - 2018-02-13.pdf
moretest - 2018-02-13.pdf
我打算通过VB脚本以某种方式执行此操作,以便在将文件排序后通过电子邮件发送文件,但这只是因为我没有太多经验。很高兴指出正确的方向。
非常感谢任何帮助,提前谢谢。
答案 0 :(得分:0)
@echo off
setlocal enabledelayedexpansion
REM get date in desired format:
for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /value') do set "today=%%I"
set "today=%today:~0,4%-%today:~4,2%-%today:~6,2%"
REM for every matching file...
for %%A in (*_*.pdf) do (
REM ...get desired part...
for /f "tokens=2 delims=_" %%B in ("%%~nA") do (
REM ... and add datestring:
ECHO ren "%%A" "%%B - %today%%%~xA"
)
)
注意:如果输出完全符合您的要求,请删除ECHO
。
答案 1 :(得分:0)
这在PowerShell中非常简单。使用正则表达式获取现有名称的所需部分。然后,连接当前日期以获取新文件名。
如果您确信正确完成了重命名,请从-WhatIf
cmdlet中删除Rename-Item
。
Get-ChildItem -Filter *.pdf -File |
ForEach-Object {
$newbase = $_.Name -replace '.*_([^_]*)\.pdf','$1'
$newname = "$newbase - $(Get-Date -UFormat %Y-%m-%d).pdf"
Rename-Item -Path $_.FullName -NewName $newname -WhatIf
}
请注意,如果通过删除名称的第一部分来创建重复名称,则不会解决此问题。
请注意,即使原始文件名包含多个下划线字符,这也会有效。
如果必须从cmd.exe shell(.bat文件)运行此命令,请将PowerShell代码放入renamenews.ps1等文件中。然后使用:
调用它powershell -NoLogo -NoProfile -File renamenews.ps1