批处理文件:检查日期名称,修剪和复制

时间:2015-07-24 07:04:48

标签: windows batch-file cmd copy

我正在寻找将检查文件夹中文件的Windows CMD批处理脚本。文件夹中的文件名为:

BEGIN 
SELECT distinct c.countryname, c.countryid 
 FROM Country c 
  Inner join Cause cs on cs.CountryName = c.CountryName
 END

所以你看,该文件以日期开头,格式为:20150724_XXXXX.mp3 (其中YYYYMMDD将是一个名称)。

当批处理文件找到将以实际日期开始的文件时,该文件将复制到另一个文件夹。然后,文件名中的日期将从仅保留XXXXX的文件中删除。

3 个答案:

答案 0 :(得分:1)

MP3_FOLDERDESTINATION设置正确的位置,然后尝试:

@echo off
setlocal enableDelayedExpansion
:::::::::::::::::::::::::
  set MP3_FOLDER=c:\mp3
  set DESTINATION=c:\mp3_no_date
:::::::::::::::::::::::::
pushd "%temp%"
makecab /D RptFileName=~.rpt /D InfFileName=~.inf /f nul >nul
for /f "tokens=3-7" %%a in ('find /i "makecab"^<~.rpt') do (
   set "current-date=%%e-%%b-%%c"
   set "YYYY=%%e"
   set "MMM=%%b"
   set "DD=%%c"
   set "current-time=%%d"
   set "weekday=%%a"
)
del ~.*
popd

set "Jan=01"
set "Feb=02"
set "Mar=03"
set "Apr=04"
set "May=05"
set "Jun=06"
set "Jul=07"
set "Aug=08"
set "Sep=09"
set "Oct=10"
set "Nov=11"
set "Dec=12"
set "MMM=!%MMM%!"

echo YYYYMMDD: %YYYY%%MMM%%DD%
set "YYYYMMDD=%YYYY%%MMM%%DD%"

pushd %MP3_FOLDER%

for %%# in (%YYYYMMDD%_*) do (
    set "fname=%%~nx#"
    set fname=!fname:~9!
    copy /y "%%~f#" "%DESTINATION%\!fname!"
)
popd 
endlocal

pause

答案 1 :(得分:0)

尝试下面的脚本。当然,您需要根据自己的需要进行调整,但它应该可以帮助您入门:

setlocal enabledelayedexpansion

set mask=%date:~6,4%%date:~3,2%%date:~0,2%*

for %%i in (%mask%) do (
    set name=%%i
    set shortname=!name:~9!
    echo !shortname!
)

首先定义搜索的掩码。如果您的本地日期显示不同(我的日期为24.07.2015),您需要调整此行

for循环枚举所有与掩码匹配的文件

因为要删除日期信息,首先必须将for-variable分配给环境变量,然后去掉前9个字符。请注意,您不能直接从for-variable执行此操作,并且如果没有enabledelayedexpansion设置,则无法访问for循环内的环境变量。

答案 2 :(得分:0)

您可以使用wmic命令以标准格式获取当前系统日期,如下所示:

@echo off
setlocal EnableDelayedExpansion

rem set source and destination directories to your needs
set sourcedir=C:\source
set destindir=C:\destin

rem get locale-independent date/time string (YYYYMMDDHHMMSS...) by "WMIC" command;
for /F "tokens=2 delims==" %%I in ('wmic OS GET LocalDateTime /VALUE') do set DAT=%%I
rem find files with today's date in name;
pushd %sourcedir%
for %%F in ("%DAT:~0,8%_*.mp3") do (
set NAM=%%~F
rem remove /L to go life (/L just lists what would be copied);
REM xcopy /L "%%~F" "%destindir%\!NAM:~9!"
)
popd

endlocal

删除/L开关以实际复制,而不只是列出要复制的内容。