如果文件名中的datetime已经过去,则需要一个将移动文件的脚本。
这是我尝试过的,但它总是移动所有文件。
@ECHO OFF
set hr=%time:~0,2%
if "%hr:~0,1%" equ " " set hr=0%hr:~1,1%
SET CurrTime=%date:~-4,4%%date:~-10,2%%date:~-7,2%%hr%%time:~3,2%%time:~6,2%
FOR /F "tokens=*" %%G IN ('dir /b E:\FileLoc\A_ChangePrice_*txt') DO (
SET "LL=%%G"
SET CurrFileTime=%LL:~16,-4%
SET "FileTime=%%CurrFileTime%%"
CALL ECHO %CurrTime%
CALL ECHO %FileTime%
IF %CurrTime% GTR %FileTime% (MOVE E:\FileLoc\%%G CALL ECHO F:\PriceChanges\%%G)
)
CurrTime = 20150325104003 FILETIME = 20160425192500
我发现这个脚本存在2个问题。
可能有一个比这更简单的解决方案,我可以提出建议。
提前致谢。
答案 0 :(得分:0)
这很有用。如果您有更清洁的解决方案,请设置正确的答案。
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
set hr=%time:~0,2%
if "%hr:~0,1%" equ " " set hr=0%hr:~1,1%
SET CurrDateTime=%date:~-2,4%%date:~-10,2%%date:~-7,2%%hr%%time:~3,2%
FOR /F "tokens=*" %%G IN ('dir /b E:\FileLoc\A_ChangePrice_*txt') DO (
SET "FileName=%%G"
SET /a "FileDateTime=!FileName:~16,-4%!"
IF %CurrDateTime% GTR !FileDateTime! (CALL MOVE E:\FileLoc\%%G CALL ECHO F:\PriceChanges\%%G)
)
ENDLOCAL
答案 1 :(得分:0)
很好地解决您的问题。我前一段时间尝试过类似的东西,但是看到你的代码让我走上了正确的道路(多亏了这一点),我对你的代码进行了重新设计(几乎相同,除了我选择了另一种方法来设置当前datetime
) 在下面。我使用不同的path
和filename
结构对其进行了测试,似乎可行。就像我说的那样几乎相同但扩展修饰符较少。
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1-3 delims=/ " %%i in ('date /t') do (set currdate=%%k%%j%%i)
for /f "tokens=1-2 delims=:. " %%i in ("%time%") do (set currtime=%%i%%j)
set currdt=%currdate:~2%%currtime%
for /f "tokens=*" %%i in ('dir /b C:\XXX\*.txt') do (
set filename=%%i
set filedt=!filename:~7%,-4!
if %currdt% gtr !filedt! (move "C:\XXX\%%i" "C:\YYY\%%i")
)
pause