2015-12-27 68 views

回答

0

在你的方法,你設置由forfiles打開cmd實例中的變量fn,但這變量在運行腳本的cmd實例中不再可用。


您可以使用~t修飾符for變量(在你的代碼,以便%%~tf)來獲得修改的日期和時間,然後通過串擴張分出一部分時間(見set /?),如果功能解析分鐘的足夠(在"%%~nxF"部剛好先返回的時間與當前文件名):

@echo off 
setlocal EnableExtensions EnableDelayedExpansion 
for %%F in ("*.jpg") do (
    set "FTIME=%%~tF" 
    rem The following line depends on region settings: 
    echo "%%~nxF": !FTIME:~11! 
) 
endlocal 
pause 

備選地,可以使用一個for /F循環來從日期分出的時間部分:

@echo off 
setlocal EnableExtensions DisableDelayedExpansion 
for %%F in ("*.jpg") do (
    for /F "tokens=1,* delims= " %%I in ("%%~tF") do (
     echo "%%~nxF": %%J 
    ) 
) 
endlocal 
pause 

如果您需要幾秒鐘的時間分辨率由forfiles所支持,則需要內forfiles呼應@ftime價值,捕捉由for /F循環,只有一次每每一個文件,該文件迭代(時間)( @file返回當前的文件名,然後由"%%~K"持有):

@echo off 
setlocal EnableExtensions DisableDelayedExpansion 
for %%F in ("*.jpg") do (
    for /F "tokens=1,* delims=|" %%K in (' 
     forfiles /M "%%~F" /C "cmd /C echo @file^|@ftime" 
    ') do (
     echo "%%~K": %%L 
    ) 
) 
endlocal 
pause 

根據您的AP摺疊,你可能不需要單獨for遍歷*.jpg文件走,因爲forfiles能做到這一點對自己:

@echo off 
setlocal EnableExtensions DisableDelayedExpansion 
for /F "tokens=1,* delims=|" %%K in (' 
    forfiles /M "*.jpg" /C "cmd /C echo @file^|@ftime" 
') do (
    echo "%%~K": %%L 
) 
endlocal 
pause 
+0

我怎樣才能在這個循環使用的文件名? –

+0

如果你正在討論'for'循環,你可以使用'〜nx'而不是'〜t'來獲取文件名+ ext。 - 在命令提示符窗口中鍵入'for /?',並在幫助文本末尾查看所有可能的情況;如果你的意思是'forfiles'循環,你需要在'@ file'中聲明'@ ftime' - 在命令提示符下鍵入'forfiles /?',以獲得所有可用'@' - 變量的完整列表。 .. – aschipfl

+0

我不明白。 echo'%L'後我如何回顯文件名?我需要幾秒鐘 –

0

您不能在forfiles調用中設置批處理文件中的變量,因爲該變量總是會產生新的shell。 forfiles是一個程序,而不是內置的命令。

但是,你可以修改時間與你的循環%%tf,沒有forfiles

setlocal enabledelayedexpansion 
FOR %%f IN (*.jpg) DO (
    set "fn=%%~tf" 
    echo !fn! 
)