Batch file 批处理文件:替换函数中的变量值
我将一个变量设置为一个值。我想用倒勾(`)转义字符串中的多个字符。以下是用反勾号替换括号出现的示例:Batch file 批处理文件:替换函数中的变量值,batch-file,replace,command-prompt,Batch File,Replace,Command Prompt,我将一个变量设置为一个值。我想用倒勾(`)转义字符串中的多个字符。以下是用反勾号替换括号出现的示例: @echo off REM SET EXAMPLE VALUE set EXAMPLEINSTALLDIR="C:\Program Files(x86)" echo %EXAMPLEINSTALLDIR% REM REMOVE QUOTES set EXAMPLEINSTALLDIR=%EXAMPLEINSTALLDIR:"=% echo %EXAMPLEINSTALLDIR% REM R
@echo off
REM SET EXAMPLE VALUE
set EXAMPLEINSTALLDIR="C:\Program Files(x86)"
echo %EXAMPLEINSTALLDIR%
REM REMOVE QUOTES
set EXAMPLEINSTALLDIR=%EXAMPLEINSTALLDIR:"=%
echo %EXAMPLEINSTALLDIR%
REM REPLACE ( WITH `(
set EXAMPLEINSTALLDIR=%EXAMPLEINSTALLDIR:(=`(%
echo %EXAMPLEINSTALLDIR%
我希望使用一个函数替换所有指定的字符(*[]+等)。但我在挣扎。以下是一个例子:
我试过这个:
set EXAMPLEINSTALLDIR="C:\Program Files(x86)\Test"
echo %EXAMPLEINSTALLDIR%
call:myGetFunc EXAMPLEINSTALLDIR %EXAMPLEINSTALLDIR%
echo %EXAMPLEINSTALLDIR%
:myGetFunc
set "%~1=%%~2:(=`(%
goto:eof
但它不起作用。任何建议都值得欣赏。…当两个
%
符号相邻时,batch会将其解释为中用于循环的变量类型(或文字),而不会执行您想要的操作。您可以通过使用延迟扩展和将替换代码放在中来解决此问题
或者您可以在其自身的唯一变量内设置要替换的值,如下所示:
@echo off
set example_dir="C:\Program Files(x86)\test"
echo %example_dir%
call :addTick example_dir %example_dir%
echo %example_dir%
exit /b
:addTick
set return_var=%~2
set return_var=%return_var:(=`(%
set "%~1=%return_var%"
使用此代码:
@echo off
set "EXAMPLEINSTALLDIR=C:\Program Files(x86)"
echo %EXAMPLEINSTALLDIR%
set "EXAMPLEINSTALLDIR=%EXAMPLEINSTALLDIR:(=`(%"
echo %EXAMPLEINSTALLDIR%
set "EXAMPLEINSTALLDIR=%EXAMPLEINSTALLDIR:)=`)%"
echo %EXAMPLEINSTALLDIR%
set "EXAMPLEINSTALLDIR=!EXAMPLEINSTALLDIR:%%=%%%%!"
echo %EXAMPLEINSTALLDIR%
endlocal
把双引号放在正确的位置是很重要的。请参阅和上的答案和其他答案,以了解两者之间的区别
set var="value"
及
我不知道为什么要在环境变量值中插入反勾号作为转义字符,因为如果包含特殊字符的字符串用双引号括起来,则在命令提示符中输入cmd/?
后,在帮助输出末尾列出的所有特殊字符都将以文字方式解释
并且命令set
不支持正则表达式替换。因此,有必要进行多次替换,以便用反勾号转义所有特殊字符
最后一个用一个百分号和另一个百分号逃逸的有点棘手。它需要延迟环境变量扩展,并在批处理文件中为每个百分比登录字符串指定2%的符号
顺便说一句:有一个环境变量ProgramFiles(x86)包含65位Windows计算机上32位应用程序的默认程序文件目录的路径。@ECHO OFF
SETLOCAL
set-ExampleSInstallDir=“C:\Program Files(x86)\Test”
回显%EXAMPLEINSTALLDIR%
调用:myGetFunc示例InstallDir%示例InstallDir%
回显%EXAMPLEINSTALLDIR%
后藤:EOF
:myGetFunc
设置“%~1=%~2”
调用集“%~1=%~1:(=`(%)
后藤:EOF
请注意,这将使用目标变量作为临时变量进行操作
还要注意子例程之前的额外“goto:eof”-否则批处理将继续进入子例程
@ECHO关闭
SETLOCAL
set-ExampleSInstallDir=“C:\Program Files(x86)\Test”
回显%EXAMPLEINSTALLDIR%
调用:myGetFunc示例InstallDir%示例InstallDir%
回显%EXAMPLEINSTALLDIR%
后藤:EOF
:myGetFunc
设置“%~1=%~2”
调用集“%$1=“%%1:(=`(%%)”
后藤:EOF
此版本用于还原“引号”
请注意,由于要批处理的某些字符的特殊含义,此技术存在一些限制。感谢您的回答。这就是我要寻找的答案。
set "var=value"