vb.net & 命令行:使用 GnuPG 解密的路径中有空格
vb.net & command line: spaces in path to decrypt with GnuPG
我已经为这个问题苦苦挣扎了一段时间。我正在尝试使用 GnuPG 解密 vb.net 中的文件。如果文件的路径没有 space,我就能够成功解密该文件。然而当出现 space 时,GnuPG returns 出现错误。我不知道我应该如何用 spaces 构造我的字符串以使 GnuPG 能够处理它。
到目前为止,这是我的代码..
Dim runDate As date
Dim destFolder As String
Dim fullName As String
Dim cmdShellTemp As String
destFolder = """\srvDat\DATA\ORTSS\RECON\ASTD rem\"""
fullName = runDate.ToString("yyyyMMdd") & "myFile.pdf.pgp"
cmdShellTemp = "gpg --batch --passphrase """ & pgpPassphrase & """ --decrypt-files """ & destFolder & fullName & """"
cmdShell = cmdShellTemp.Replace("\", "/")
Shell(cmdShell)
有什么想法吗?
谢谢
编辑
查看 PGP 命令行文档后 - 它指定提供给 decrpyt
命令的任何文件都被视为 space 分隔。考虑到这一点,您在提供整个路径时无法实现您的目标(除非该路径不包含 spaces)。您将需要在包含这些文件的目录中启动命令提示符,并相对地引用它们。
Page 69 of the instruction manual states:
Decrypts encrypted files with local keys or keys on a PGP KMS server. If data being decrypted is also signed, the signature is automatically verified during the decryption process.
The usage format is:
pgp --decrypt <input> [<input2> ...] [<inputd>...] [options]
Where:
<input>
(required). Space-separated names of the files to decrypt.
(针对字符串连接的原始答案):
即使没有 space,它也应该允许在路径周围加上引号,所以也许无论如何都强制使用引号。试试这个:
Dim runDate As date
Dim destFolder As String
Dim fullName As String
Dim cmdShellTemp As String
destFolder = "\srvDat\DATA\ORTSS\RECON\ASTD rem\" '// note the removed quote marks
fullName = runDate.ToString("yyyyMMdd") & "myFile.pdf.pgp"
cmdShellTemp = "gpg --batch --passphrase """ & pgpPassphrase & """ --decrypt-files """ & destFolder & fullName & """"
cmdShell = cmdShellTemp.Replace("\", "/")
Shell(cmdShell)
最终问题出在您的引号上 - 您添加了两次:
destFolder = """\srvDat\DATA\ORTSS\RECON\ASTD rem\"""
会产生 "\srvDat\DATA\ORTSS\RECON\ASTD rem\"
和:
cmdShellTemp = "gpg --batch --passphrase """ & pgpPassphrase & """ --decrypt-files """ & destFolder & fullName & """"
最终会是这样的:
gpg --batch --passphrase "pass123" --decrpyt-files ""\srvDat\DATA\ORTSS\RECON\ASTD rem\"20120105myFile.pdf.pgp"
这会在文件路径中产生不需要的引号
我已经为这个问题苦苦挣扎了一段时间。我正在尝试使用 GnuPG 解密 vb.net 中的文件。如果文件的路径没有 space,我就能够成功解密该文件。然而当出现 space 时,GnuPG returns 出现错误。我不知道我应该如何用 spaces 构造我的字符串以使 GnuPG 能够处理它。
到目前为止,这是我的代码..
Dim runDate As date
Dim destFolder As String
Dim fullName As String
Dim cmdShellTemp As String
destFolder = """\srvDat\DATA\ORTSS\RECON\ASTD rem\"""
fullName = runDate.ToString("yyyyMMdd") & "myFile.pdf.pgp"
cmdShellTemp = "gpg --batch --passphrase """ & pgpPassphrase & """ --decrypt-files """ & destFolder & fullName & """"
cmdShell = cmdShellTemp.Replace("\", "/")
Shell(cmdShell)
有什么想法吗?
谢谢
编辑
查看 PGP 命令行文档后 - 它指定提供给 decrpyt
命令的任何文件都被视为 space 分隔。考虑到这一点,您在提供整个路径时无法实现您的目标(除非该路径不包含 spaces)。您将需要在包含这些文件的目录中启动命令提示符,并相对地引用它们。
Page 69 of the instruction manual states:
Decrypts encrypted files with local keys or keys on a PGP KMS server. If data being decrypted is also signed, the signature is automatically verified during the decryption process.
The usage format is:
pgp --decrypt <input> [<input2> ...] [<inputd>...] [options]
Where:
<input>
(required). Space-separated names of the files to decrypt.
(针对字符串连接的原始答案):
即使没有 space,它也应该允许在路径周围加上引号,所以也许无论如何都强制使用引号。试试这个:
Dim runDate As date
Dim destFolder As String
Dim fullName As String
Dim cmdShellTemp As String
destFolder = "\srvDat\DATA\ORTSS\RECON\ASTD rem\" '// note the removed quote marks
fullName = runDate.ToString("yyyyMMdd") & "myFile.pdf.pgp"
cmdShellTemp = "gpg --batch --passphrase """ & pgpPassphrase & """ --decrypt-files """ & destFolder & fullName & """"
cmdShell = cmdShellTemp.Replace("\", "/")
Shell(cmdShell)
最终问题出在您的引号上 - 您添加了两次:
destFolder = """\srvDat\DATA\ORTSS\RECON\ASTD rem\"""
会产生 "\srvDat\DATA\ORTSS\RECON\ASTD rem\"
和:
cmdShellTemp = "gpg --batch --passphrase """ & pgpPassphrase & """ --decrypt-files """ & destFolder & fullName & """"
最终会是这样的:
gpg --batch --passphrase "pass123" --decrpyt-files ""\srvDat\DATA\ORTSS\RECON\ASTD rem\"20120105myFile.pdf.pgp"
这会在文件路径中产生不需要的引号