替换文本文件批处理中的特殊字符

时间:2014-11-17 21:17:53

标签: batch-file replace text-files special-characters

哎哟。这一个很痛。很难总结我的问题,因为我认为它有很多部分。相关和说明性代码部分:

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线并且撞到了一堵砖墙! 感谢您的回复...

2 个答案:

答案 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

如果文件可以包含!字符

,则必须在处理文件时禁用enabledexpansion

答案 1 :(得分:0)

禁用延迟扩展应该足够了。

Setlocal DisableDelayedExpansion

在拨打你的wabat之前使用它并在没有百分号的情况下调用它。