bat命令行%*通配参数遇到带()的文件名秒退有解法吗
FOR %%i in (%*) do (7z.exe a "%%~i.7z" "%%i" -mx9 -mmt)
写个批量压缩的命令,把需要压缩的文件或者文件夹,拉到bat文件里就直接开始压缩
for循环命令下这个通配输入参数%*,遇到带()的文件或者文件夹,就会闪退,找不到办法解决
求大神指导 bing的ai这么回答的,不知道有没有用。
在批处理脚本中,括号 ()、& 和 ^ 等字符具有特殊含义,因此在处理包含这些字符的文件名时可能会出现问题1。你可以通过启用并应用延迟扩展来解决这个问题1。以下是一个示例:
@echo off
setlocal enabledelayedexpansion
for %%i in (%*) do (
set "file=%%~i"
7z.exe a "!file:.=!.7z" "%%i" -mx9 -mmt
)
endlocal
在这个示例中,我们使用了 setlocal enabledelayedexpansion 来启用延迟扩展,然后使用 ! 而不是 % 来引用变量。这样,即使文件名中包含括号,也可以正确处理。希望这个解决方案对你有所帮助! 另一个写法
--
以下是一个批量压缩的命令,可以将需要压缩的文件或文件夹拖到批处理文件中,然后开始压缩:
@echo off
setlocal enabledelayedexpansion
set "sevenzip=C:\Program Files\7-Zip\7z.exe"
for %%i in (%*) do (
set "file=%%~i"
set "file=!file:(=^(!"
set "file=!file:)=^)! "
"!sevenzip!" a -t7z "%%~ni.7z" "%%i" -mx9 -mmt
)
在上面的代码中,我们使用了setlocal enabledelayedexpansion来启用延迟扩展,这样我们就可以在循环中使用!来访问变量。我们还使用了set "file=!file:(=^(!"和set "file=!file:)=^)! "来转义文件名中的括号,以避免出现问题。
这个命令应该可以解决你的问题。如果你有任何疑问,请告诉我。 hayse 发表于 2023-12-23 23:29
bing的ai这么回答的,不知道有没有用。
在批处理脚本中,括号 ()、& 和 ^ 等字符具有特殊含义,因此在处理 ...
2楼代码我还能看得懂,AI给的2楼代码是错误的,跑不起来的,修改之后能跑,但是问题依旧,遇到带()之类特殊名字的文件,还是闪退
setlocal enabledelayedexpansion
for %%i in (%*) do (
set "file=%%~i"
"C:\Program Files\7-Zip\7z.exe" a "!file!.7z" "%%i" -mx9 -mmt
)
endlocal hayse 发表于 2023-12-23 23:31
另一个写法
--
以下是一个批量压缩的命令,可以将需要压缩的文件或文件夹拖到批处理文件中,然后开始压缩: ...
3楼这个代码跑不起来,AI不是很靠谱呀,乱得很,我甚至没看懂思路,set 7Z程序干啥 set "ARGS=%*"
setlocal EnableDelayedExpansion
for %%i in (!ARGS!) do (
endlocal
dir /A "%%~fi" | > nul 2>&1 findstr "DIR" && (
"7z a "%%~i.7z" "%%~i\*" -mx9 -mmt
) || (
7z a "%%~i.7z" "%%~fi" -mx9 -mmt
)
setlocal
)
endlocal
ai 的解释都对, 只是写的代码令人忍俊不禁 本帖最后由 ~〇~ 于 2023-12-24 03:04 编辑
xy. 发表于 2023-12-24 00:10
ai 的解释都对, 只是写的代码令人忍俊不禁
大佬你的代码能行,非常感谢!
遇到()确实是可以了,但是碰到&依旧还是闪退,[晕倒] 本帖最后由 ~〇~ 于 2023-12-24 03:09 编辑
xy. 发表于 2023-12-24 00:10
ai 的解释都对, 只是写的代码令人忍俊不禁
@echo off
set "ARGS=%*"
setlocal EnableDelayedExpansion
for %%i in (!ARGS!) do (
endlocal
(
7z.exe a "%%~ni.7z" "%%~i" -mx9 -mmt
)
setlocal
)
endlocal
看了一下,我把代码简化成这样也可以通过测试,遇到()确实搞定了,但是碰到&还是闪退,唉,太多坑了
23年了 pwsh吧 [困惑] 知道玩批命令就不知道批量改文件名?乌发李姐。。。
页:
[1]