【发布时间】:2010-03-29 23:07:35
【问题描述】:
这是我解析目录的批处理文件,以及特定类型的压缩文件
REM Begin ------------------------
tasklist /FI "IMAGENAME eq 7za.exe" /FO CSV > search.log
FOR /F %%A IN (search.log) DO IF %%~zA EQU 0 GOTO end
for /f "delims=" %%A in ('dir C:\Temp\*.ps /b') do (
"C:\Program Files\7-Zip\cmdline\7za.exe" a -tzip -mx9 "C:\temp\Zip\%%A.zip" "C:\temp\%%A"
Move "C:\temp\%%A" "C:\Temp\Archive"
)
:end
del search.log
REM pause
exit
REM End ---------------------------
这段代码可以很好地满足我 90% 的需求。它将作为计划任务部署。
但是,在实时情况下,*.ps 文件相当大(最小为 1GB)。所以代码应该检查传入的文件是否已完全写入并且没有被正在编写它的应用程序锁定。
我在其他地方看到了另一个示例,建议采用以下方法
:TestFile
ren c:\file.txt c:\file.txt
if errorlevel 0 goto docopy
sleep 5
goto TestFile
:docopy
不过,这个例子适用于固定文件。如何在 for 循环中使用这么多标签和 GoTo 而不会导致无限循环?或者这段代码在 For 循环中使用是否安全?
感谢您的帮助。
【问题讨论】:
标签: windows command-line batch-file archive