我正在寻找将检查文件夹中文件的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
的文件中删除。
答案 0 :(得分:1)
为MP3_FOLDER
和DESTINATION
设置正确的位置,然后尝试:
@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
开关以实际复制,而不只是列出要复制的内容。