2014-03-06 54 views
0

我是一个bat文件的新手,并且想知道是否有方法将我的月份名称添加到一组pdf文件中,而无需使用F2或Tab重命名每一个。如何将月份的名称添加到一组文件中

基本上,我为我的一个客户提供了一组计费报告,他们有多个pdf和excel格式的网站。我想在文件名上加上月份,这样我就可以很容易地将它们分开。例如,我有这样的报告:

  • 奥迪泰特伯里呼叫信息
  • 大众泰特伯里呼叫信息
  • BMW伦敦呼叫信息

我想将它们重新命名为:

  • 奥迪泰特伯里呼叫信息二月
  • V olkswagen泰特伯里呼叫信息二月
  • 宝马伦敦呼叫信息二月。

有人可以帮助我吗?此外,我会请求你帮助我获得一些资源,以便我可以学习在未来自己创造这样的事情。

+3

而且,你怎么确定本月份的名称PDF文件名的地方? –

回答

0

这里有一种方法可以做到这一点在Windows批处理:

@echo off 
setlocal EnableDelayedExpansion 

set m=100 
for %%a in (January February March April May June^
    July August September October November December) do (
    set /A m+=1 
    set month[!m:~-2!]=%%a 
) 

:: Do the rename. Remove echo after you verify output. 
for %%a in (*.pdf) do (
    set "file=%%~dpnxa" & set "file=!file:\=\\!" 
    echo file=!file! 
    Call :GetFileMonthNum "!file!" C mnum  
    Call set fmonth=%%month[!mnum!]%% 
    echo ren "%%a" "%%~na !fmonth!%%~xa" 
    echo ren "%%~na.xls" "%%~na !fmonth!.xls" 
) 

goto :eof 

:GetFileMonthNum <file> <created/accessed/modified> <outVar> 
setlocal 
for /f "tokens=1-3" %%a in (
    'wmic datafile where "name='%~1'" get creationdate^,lastaccessed^
    ^,lastmodified^|findstr /r "\.*-.*"' 
) do (
    set opts=%2 
    if "!opts:~0,1!" EQU "C" set "dt=%%a" 
    if "!opts:~0,1!" EQU "A" set "dt=%%b" 
    if "!opts:~0,1!" EQU "M" set "dt=%%c" 
    set "mm=!dt:~4,2!" 
) 
endlocal & set %~3=%mm% 
exit /b 
0

您可以使用“stat”命令获取有关每个文件的统计信息。然后你用你想要的日期来表达你的想法; stat提供“访问”,“修改”和“更改”日期。然后,您只需从该字符串中读取月份并重命名您的文件。 你可以做这样的事情,假设你要标注与它在修改了一个月的每个文件(你也可以尝试访问或更改,除了修改):

foreach my $file ($pathToYourFolder/*.txt) # or pdf or anything 
{ 
    my $date = `stat $file | grep Modify`; 
    $date =~ /(\d+)-(\d+)-/; 
    my ($year,$month) = ($1,$2); 
    `mv $file $month-$file`; 
} 

您还可以添加一个月到每个文件名的末尾(您可以利用File :: Basename或其他来确保在文件的扩展名之前添加月份)。

+2

当Perl提供[内置等效项](http://perldoc.perl.org/functions/stat.html)时,不要使用反引号来调用OP操作系统上可用或不可用的外部命令。 Perl的stat仍然存在[可移植性问题](http://perldoc.perl.org/perlport.html#stat),但至少它会在Windows上运行。 – ThisSuitIsBlackNot

相关问题