此批处理是创建一个报告,输出文件夹的最新文件。主要目的是查看目录中生成文件的日期。还可以轻松检查目标目录是否更新。
问题:
更改输出以获取三个最新文件,也被另一个For循环内的For循环困住了,我也在使用延迟扩展。
尝试在FOR循环中使用延迟扩展变量(!forOPT!)
FOR ... (
FOR /F "!forOPT!" %%a IN ('dir "!path2check!" /A-D /OD /t:w ^| FIND "/"') DO ( )
)
我想在另一个 For 循环 中使用变量“forOPT”来替换“skip=10 tokens=1-5”,但因为 For 循环 不会不像延迟扩展(!forOPT!),我被卡住了。
编辑:
经Mofi的建议和建议,问题现已解决。谢谢莫菲。
至于如何展示的答案,也是 Jeb 做出的。所以也谢谢你,杰布。
我的相关问题的解决方案是使用CALL函数而不是嵌套FOR循环。
请参阅我的回答以获取最终代码,并进行一些调整和附加要求来满足我的需求。
@if (@CodeSection == @Batch) @then
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "path2check=NULLLL"
SET "TargetDIR=%~dp0"
SET "curPATH=%~F0"
SET "newSize1=0"
SET JScall=Cscript //nologo //E:JScript !curPATH!
FOR /f "usebackq delims=" %%I IN (destPath.txt) DO (
SET "path2check=%%I"
SET cnt=0
SET totalSkip=1
FOR %%A IN ("!path2check!\*") DO SET /a cnt+=1
SET /a totalSkip=!cnt!-3
SET "forOPT=skip=!totalSkip! tokens=1-5"
ECHO !forOPT! ^<^<^< shows option
ECHO.
ECHO ---------------------
FOR /F "!forOPT!" %%a IN ('dir "!path2check!" /A-D /OD /t:w ^| FIND "/"') DO (
SET "Date1=%%a"
SET "Time1=%%b"
SET "Time2=%%c"
SET "Size1=%%d"
SET "Filename1=%%e"
SET newSize1=!size1:,=!
IF !newSize1! LEQ 1000 (
SET "newSize2=!newSize1! Bytes"
)
IF !newSize1! GEQ 1000 (
FOR /F %%a IN ('!JScall! "!newSize1!/1024"') DO SET "newSize2=%%a"
FOR /F "delims=." %%z IN ("!newSize2!") DO SET "newSize2=%%z KB"
)
IF !newSize1! GEQ 1000000 (
FOR /F %%a IN ('!JScall! "!newSize1!/1024/1024"') DO SET "newSize2=%%a"
FOR /F "delims=." %%z IN ("!newSize2!") DO SET "newSize2=%%z MB"
)
ECHO !Filename1! - !newSize2! - !Time1!!Time2! - !Date1!
)
ECHO - EOR - !path2check!
ECHO.
)
GOTO :EOF
@end
WScript.ECHO(eval(WScript.Arguments.Unnamed.Item(0)));
报告也应如下所示。 (每个目录最新的三个文件)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Most recently file of path : E:\
Date: dd/mm/yyyy hh:mmPM | Size: xxx MB | Filename: abc.abc
Date: dd/mm/yyyy hh:mmPM | Size: xxx MB | Filename: abc.abc
Date: dd/mm/yyyy hh:mmPM | Size: xxx MB | Filename: abc.abc
- EOR -
这个批处理文件也是从 StackOverflow(<谢谢)和 SS64(<谢谢)上的许多网站合并和混合在一起的。
即使我解释得不太好,但你可以问,我可以澄清。 :)
如果标题需要编辑,请告诉我,这也可能会帮助其他有类似问题的人。
谢谢Stack Overflow、Mofi 和 Jeb。
最佳答案
在 FOR 选项中,只有百分比扩展有效,因此您需要使用函数。
FOR /f "usebackq delims=" %%I IN (destPath.txt) DO (
...
SET "forOPT=skip=!totalSkip! tokens=1-5"
call :innerLoop
)
:innerLoop
FOR /F "%forOPT%" %%a IN ('dir "!path2check!" ...) do (
....
)
exit /b
关于windows - *For 循环* 和 *延迟扩展* 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33973243/