哎哟。这一个很痛。很难总结我的问题,因为我认为它有很多部分。相关和说明性代码部分:
call %wabat%
set _tmpGameP_gF=%waoutput%
echo Result: %_tmpGameP_gF%
if not exist "%_tmpGameP_gF%" (
echo That is an invalid file path or filename! Folder or file does not exist. Please re-select or re-enter.
exit /b
)
FOR %%i IN ("%_tmpGameP_gF%") DO (
set _tmpbarefile=%%~ni
set _tmpfilepath=%%~dpi
set _tmpfilename=%%~nxi
)
wabat.bat只是一个由Wizapp.exe生成的文本文件,其中包含类似的内容:
set waoutput=I:\Tests\Somefile(North)[!].zip
set waoutnum=
脚本的想法:part1测试文件是否存在,第二部分将文件分成组成部分。
问题当然是特殊字符。这种方法很好,直到你得到特殊的字符混合。
虽然命令行显示为:
set waoutput=I:\Tests\Somefile(North)[!].zip
(这是来自电话)
当回显结果时(即使尝试回显%waoutput%),我得到:
Result: I:\Tests\Somefile(North)[].zip
显然这与解析!。
有关尝试了很多事情,只是无法实现这一点 - 我感觉这是一个难以置信的难以跨越的桥梁。
哦,只是为了让它变得非常有趣,我无法重命名文件或文件夹。可以改变wabat.bat文件。考虑为所有特殊字符搜索和替换wabat.bat以添加转义字符,但完全失去了尝试这样做+不确定这在变量等的最终使用中是否可行。
非常感谢任何有关这条线路的帮助,因为7,000线并且撞到了一堵砖墙! 感谢您的回复...
答案 0 :(得分:2)
我认为您的问题是您启用了延迟扩展。
试着这个来理解:
@echo off
set waoutput=I:\Tests\Somefile(North)[!].zip
echo %waoutput%
setlocal enabledelayedexpansion
echo %waoutput%
- >输出:
I:\Tests\Somefile(North)[!].zip
I:\Tests\Somefile(North)[].zip
如果文件可以包含!
字符
答案 1 :(得分:0)
禁用延迟扩展应该足够了。
Setlocal DisableDelayedExpansion
在拨打你的wabat之前使用它并在没有百分号的情况下调用它。