@Echo On
FOR %%f IN (*.jpg) DO (
forfiles /M "%%f" /C "cmd /V:ON /c set [email protected]"
echo %%fn%%
)
pause
我想要得到@ftime
在FOR
循環,但這是行不通的。也許有另一種方法來獲取文件的修改時間?設置變量forforfiles in for循環
@Echo On
FOR %%f IN (*.jpg) DO (
forfiles /M "%%f" /C "cmd /V:ON /c set [email protected]"
echo %%fn%%
)
pause
我想要得到@ftime
在FOR
循環,但這是行不通的。也許有另一種方法來獲取文件的修改時間?設置變量forforfiles in for循環
在你的方法,你設置由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
您不能在forfiles
調用中設置批處理文件中的變量,因爲該變量總是會產生新的shell。 forfiles
是一個程序,而不是內置的命令。
但是,你可以修改時間與你的循環%%tf
,沒有forfiles
:
setlocal enabledelayedexpansion
FOR %%f IN (*.jpg) DO (
set "fn=%%~tf"
echo !fn!
)
我怎樣才能在這個循環使用的文件名? –
如果你正在討論'for'循環,你可以使用'〜nx'而不是'〜t'來獲取文件名+ ext。 - 在命令提示符窗口中鍵入'for /?',並在幫助文本末尾查看所有可能的情況;如果你的意思是'forfiles'循環,你需要在'@ file'中聲明'@ ftime' - 在命令提示符下鍵入'forfiles /?',以獲得所有可用'@' - 變量的完整列表。 .. – aschipfl
我不明白。 echo'%L'後我如何回顯文件名?我需要幾秒鐘 –