批处理文件:选择多个新上传的文件



我在编写批处理文件时遇到了麻烦,该文件可以计算有多少新文件被添加到文件夹中。这是整个系统的概述,我们有一个文件夹,当他们触发上传时,将接收加密文件。文件每小时只能接收一次,有时我们一次接收多个文件。

到目前为止,我已经创建了一个批处理文件,它只能检测到一个新上传的文件并设法解密加密的文件。下面是代码:
@echo off
for /f %%i in ('dir /b/a-d/od/t:c') do set LAST=%%i
echo newest file: %LAST%
gpg --batch --passphrase="PASSPHRASE" --output "OUTPUT FOLDER%LAST%" --decrypt "%LAST%"
timeout 50

所以基本上,第一行是关于根据我设置的参数定位最近上传的文件并将其命名为"%LAST%"。下面这行只是一种方法,用于解密加密文件并指示输出文件应该放在哪里。但是代码只能检测到一个文件。我应该如何使它检测多个文件,只检测新上传的文件?我一直在考虑使用for循环和计数器,但我不确定如何实现该方法。

您希望在FOR循环中处理每个文件。更像这样:

@echo off
setlocal enabledelayedexpansion
for /f %%i in ('dir /b/a-d/od/t:c') do (
set LAST=%%i
echo newest file: !LAST!
echo gpg --batch --passphrase="PASSPHRASE" --output "OUTPUT FOLDER!LAST!" --decrypt "!LAST!"
timeout 2
echo move "!LAST!" c:already_processed
)
echo All done!

我用那一行的echo替换了你的gpg执行,但是你明白了要点。

注意,在FOR循环中,需要启用延迟扩展,如下所示。(您也可以启动cmd /V:on,这将在CMD会话期间打开它。)作为其中的一部分,您的变量引用将需要使用!variable!符号和!符号,以确保它们具有当前迭代的值。

最后,我建议在处理完每个文件后将其move放到另一个目录中。否则,您将不得不维护一个已经处理过的文件列表,这似乎比将它们移出目录更麻烦。