我有以下代码应该返回一个文件的最后修改date作为一个string:
:getLastModifiedDate @echo on SETLOCAL enabledelayedexpansion set FILE=%~f1 set FILE=!FILE:%NETWORK_DRIVE_SHARE_PATH%=%NETWORK_DRIVE_NAME%! set FILE=%FILE:\=\\% set RETURN_VALUE="internal script error" for /f "tokens=* usebackq" %%d in (`wmic datafile where Name^="%FILE%" get lastmodified ^| findstr ^"[0-9]^"`) do ( set tmpd="%%d ddd" echo 111111 %tmpd% echo 222222 !tmpd! echo 333333 %%tmpd%% set RETURN_VALUE=%tmpd:~0,14% ) (ENDLOCAL set getLastModifiedDateResult=%RETURN_VALUE% ) exit @echo off goto :eof
我期待这一点
set tmpd="%%d ddd"
至less将ddd
设置为%tmpd%
值。
然而,在执行过程中,什么都没有完成:
C:\Windows\system32>for /F "tokens=* usebackq" %d in (`wmic datafile where Name="S:\\Actually\\Existing File.csv" get lastmodified | findstr "[0-9]"`) do ( set tmpd="%d ddd" echo 111111 echo 222222 !tmpd! echo 333333 %tmpd% set RETURN_VALUE=~0,14 )
我期望我的for循环成为这个问题的原因。 当我在cmd.exe中执行完全相同的string时,我得到一个结果:
C:\Users\uuuu>for /f "tokens=* usebackq" %d in (`wmic datafile where Name^="S:\\Actually\\Existing File.csv" get lastmodified ^| findstr ^"[0-9]^"`) do ( set tmpd=%d ) [xxx@yyy auf zzzz] ) sers\yc067xd>(set tmpd=20150413172700.000000+120 [yc067xd@R0199 auf FS00QHE0] C:\Users\uuuu>echo %tmpd% 20150413172700.000000+120
我在哪里做错了什么?
你必须使用wmic吗? 有一个更简单的方法来返回上次修改日期:
FOR %%f IN ("%file%") DO SET lastmodified=%%~tf
所以你的脚本看起来像这样:
:getLastModifiedDate @echo on SETLOCAL enabledelayedexpansion set FILE=%~f1 set FILE=!FILE:%NETWORK_DRIVE_SHARE_PATH%=%NETWORK_DRIVE_NAME%! set FILE=%FILE:\=\\% set RETURN_VALUE="internal script error" FOR %%f IN ("%FILE%") DO SET getLastModifiedDateResult=%%~tf set getLastModifiedDateResult=%getLastModifiedDateResult:~0, 10% @echo off endlocal & goto :eof
解压缩文件日期问题的最简单的解决方案可以用来获取CREATE日期(和时间) 和 最后修改日期(和时间),作为文本字符串。
该解决方案克服了特定的困难,其中文件的路径包含空格 (或其他非字母数字字符)。
@echo off :: File location SET file=C:\Users\%username%\Desktop\Get TIMESTAMP\file.txt :: Get CREATED timestamp of specified file FOR /F "tokens=1,* delims= " %%A IN ('DIR /T:C /A:-D "%file%" ^|FIND "/"') DO ( SET Cdate=%%A SET Ctime=%%B SET Ctime=!Ctime:~0,5! :: Get file Creation Date SET DCREATED=!Cdate! ECHO CREATED DATE: !DCREATED! :: Get file Creation Time SET TCREATED=!Ctime! ECHO CREATED TIME: !TCREATED! ) & ECHO. :: Get LAST MODIFIED timestamp of specified file FOR /F "tokens=1,* delims= " %%A IN ('DIR /T:W /A:-D "%file%" ^|FIND "/"') DO ( SET Mdate=%%A SET Mtime=%%B SET Mtime=!Mtime:~0,5! :: Get file MODIFIED Date SET DMODIFIED=!Mdate! ECHO MODIFIED DATE: !DMODIFIED! :: Get file MODIFIED Time SET TMODIFIED=!Mtime! ECHO MODIFIED TIME: !TMODIFIED! ) & ECHO.