Hello,
How to compress a file containing parentheses (or other character interpreted by the Terminal) in its name with the Terminal zip command? (otherwise error message: “Unexpected end of zip file”)
Thanks
Did you escape the parenthesis? For the shell you either need to use the \ in front like ( or you can try to quote the path like “my path with spaces”.
The “Unexpected end of zip file” error typically occurs when you try to extract or open a corrupted or incomplete ZIP file. Some compression tools provide options to repair damaged ZIP files. The compression tool you’re using might not handle it well?
Thanks, I do that (works fine):
' Escaping parentheses ( )
Var escapedFilePath As String = ReplaceAll(sourcePath, "(", "\(")
escapedFilePath = ReplaceAll(escapedFilePath, ")", "\)")
'Escaping single quotes '
escapedFilePath = ReplaceAll(escapedFilePath, "'", "\'")
' Escaping double quotes "
escapedFilePath = ReplaceAll(escapedFilePath, """", "\""")
Wouldn’t it be safer to just replace all non-ASCII characters with a trailing backslash?
BTW: This may be possible using a single RegEx, maybe within a dedicated method?
Something like:
dim rx as new RegEx
rx.SearchPattern = "(?Umi-s)([\x00-\x2F|\x3A-\x40|\x91-\xFF]+)"
rx.ReplacementPattern = "\\$1"
dim rxOptions as RegExOptions = rx.Options
rxOptions.MatchEmpty = false
rxOptions.StringBeginIsLineBegin = false
rxOptions.StringEndIsLineEnd = false
rxOptions.LineEndType = 4
rxOptions.ReplaceAllMatches = true
dim replacedText as string = rx.Replace( sourceText )
The above replaces
This is an un-escaped Filename!.pdf
with
This\ is\ an\ un\-escaped\ Filename\!\.pdf
I’m sure @Kem_Tekinay knows an even better RegEx solution.
This simple conversion probably will fix all you got and some more:
// my insane file () ײ [] }{ name.zip -> ײmy insane file () \ײ [] }{ name.zipײ
Var enclosedPath As String = """"+ReplaceAll(sourcePath, """", "\""").ReplaceAll("\", "\\")+""""
Not bad @Rick_A
Just for better readabillity:
// For those like me, who hate """" instead of Chr(34)... :-D
Var enclosedPath As String = Chr(34) + ReplaceAll(sourcePath, Chr(34), "\" + Chr(34)).ReplaceAll("\", "\\") + Chr(34)
Chr(24) vs """"
Function Call versus a Constant. For those like me, constants wins. For those who hates (I don’t know why) the 4 double quotation marks, and like to remember numeric codes, there’s the Unicode constant &u22
Var quote As String = &u22 + “quote” + &u22
Just bc this looks so wrong