嵌套用于循环的Windows批处理脚本将当前文件名从innerloop传递到另一个命令

在批处理脚本中确实很难使用双引号,双百分号等。

所以我有一个文件夹,让我们称之为C:\ EncryptedFiles 它可以具有一个或多个子文件夹,每个子文件夹可以具有一个或多个加密文件(扩展名为gpg)。

我需要查看C:\ EncyptedFiles文件夹中的所有内容,并遍历每个子文件夹中的文件,并在存在加密文件的位置解密这些文件。

因此,如果我们有另一个名为Subfolder1的文件夹,其文件为EncryptedFile1.csv.gpg,则其绝对路径为

C:\EncryptedFiles\Subfolder1\EncryptedFile1.csv.gpg

我需要获取这个文件,通过gpg命令行运行它并输出一个文件

C:\EncryptedFiles\Subfolder1\EncryptedFile1.csv.gpg

这就是我到目前为止所拥有的-

Set ROOTDIR=C:\EncryptedFiles
for /f %%g in ('dir /b /s ""%ROOTDIR""') do (
      for /r %%i in (%%g) do (
         REM this is where i need to pass each file to gpg 
      )
)

我知道解密文件的命令看起来像这样-

gpg --batch --yes --passphrase myPassword --output "D:\testOutput.csv" --decrypt "D:\testOutput.csv.gpg"

以上命令将获取D:\ testOutput.csv.gpg并将其解密,然后创建输出文件testOutput.csv

我需要将这两个放在一起,而且似乎无法正常工作。 对于解密,我可以通过使用双引号对完整路径进行硬编码来解密文件,如上所示。

现在在嵌套的for循环中,在外循环中,%% g是C:\ EncryptedFiles中的每个子文件夹,并且它保存该文件夹的完整路径(这是/ s的意思)。在内部循环中,%% i将在子文件夹中具有每个文件的完整路径。

在Inner for循环中,我尝试了此操作-

setlocal EnableDelayedExpansion
setoutputName=%g%\%%~ni
setinputName=%%i
gpg --batch --yes --passphrase mypassword --output "%setoutputName%" --decrypt "%setinputName%"
endlocal

所以完整的代码是这样的-

    Set ROOTDIR=C:\EncryptedFiles
    for /f %%g in ('dir /b /s ""%ROOTDIR""') do (
          for /r %%i in (%%g) do (
             setlocal EnableDelayedExpansion
             setoutputName=%g%\%%~ni
             setinputName=%%i
             gpg --batch --yes --passphrase mypassword --output "%setoutputName%" --decrypt "%setinputName%"
            endlocal
          )
    )

我对setoutputName =%g%\ %%〜ni的理解是,%g将给出目录名称(来自外部循环),而%%〜ni将给出输入文件的名称而无需扩展名。因此,.gpg将被删除。因此,输出路径将与在内部循环中迭代的当前文件的路径相同,并删除扩展名。

我的批处理脚本永远挂起,直到我强制退出为止。 有人可以帮我吗。并希望提供批处理脚本的答案,而不是命令提示符。我知道每个人都说唯一的区别是,在批处理脚本方面,我们使用的是百分比而不是单个百分比,但是我遇到了场景变化,行为从命令提示符更改为批处理脚本

hezhenhuaf1 回答:嵌套用于循环的Windows批处理脚本将当前文件名从innerloop传递到另一个命令

我想一个循环就足够了:

@echo off
set "ROOTDIR=C:\EncryptedFiles"
for /R %ROOTDIR% %%i in (*.gpg) do (
     gpg --batch --yes --passphrase mypassword --output "%%~dpni" --decrypt "%%~i"
)
pause
本文链接:https://www.f2er.com/3076907.html

大家都在问