我有大量的excel文件,文件名都以时间戳结尾,如下所示:
examplefile_2018_08_24_110222.xlsx
我想根据时间戳的月份和年份移动所有这些文件,但我希望文件夹名称是上个月。因此,对于上面的示例,我想创建一个名为July2018的文件夹,并将该文件移动到该文件夹中。是否可以使用批处理文件执行此操作?
答案 0 :(得分:2)
我认为这将做你需要它做的事情。我添加了一些评论,如果您不理解代码行,请告诉我。
@ECHO OFF
REM get a list of the files
FOR %%F IN (*.xlsx) DO (
REM GET 2nd, 3rd and 4th parts of file name: examplefile_2018_08_24_110222.xlsx
FOR /F "tokens=2,3,4 delims=_" %%G IN ("%%~F") DO (
REM GET previous month and/or year
FOR /F "delims=" %%J IN ('powershell "(Get-Date %%H/%%I/%%G).AddMonths(-1).ToString('MMMMyyyy')"') DO (
REM make the directory
md "%%J" >nul 2>&1
REM move the file
move "%%~F" "%%J\"
)
)
)
答案 1 :(得分:0)
您应该能够关注上一个问题:How to rename file by replacing substring using batch in Windows
这个问题更像是一个"发现和替换"批处理文件问题,但可能会很好。在您的情况下,您似乎可能想要查找和替换:
2018_08
与July2018
,
2018_09
的 August2018
等
这里的问题是所需的案例和循环数量。
@echo off
Setlocal enabledelayedexpansion
Set "Location=C:\Users\Example"
Set "Pattern=2018_08"
Set "Replace=July2018"
For %%# in ("%Location%\*.xlsx") Do (
Set "File=%%~nx#"
Ren "%%#" "!File:%Pattern%=%Replace%!"
)
Set "Pattern=2018_09"
Set "Replace=August2018"
For %%# in ("%Location%\*.xlsx") Do (
Set "File=%%~nx#"
Ren "%%#" "!File:%Pattern%=%Replace%!"
)
Set "Pattern=2018_10"
Set "Replace=September2018"
For %%# in ("%Location%\*.xlsx") Do (
Set "File=%%~nx#"
Ren "%%#" "!File:%Pattern%=%Replace%!"
)
Pause&Exit
请注意,C:\ Users \ Example将替换为您想要的文件夹。