我需要用批处理脚本从字符串中删除字符*
,该字符串类似于:
*10.*31.**2.*65
我想要删除这个字符串中的所有*
。
*
。因为以 *
开头的替换表达式具有特殊含义。 - jeb%variable:StrToFind=NewStr%
,请参考 https://ss64.com/nt/syntax-replace.html。 - Wayne Uroda@ECHO OFF
SETLOCAL
SET mystring=*10.31.*2.*65
:deaster
FOR /f "tokens=1* delims=*" %%i IN ("%mystring%") DO (
SET mystring=%%j
IF DEFINED mystring (
SET mystring=%%i%%j
GOTO deaster
) ELSE (
SET mystring=%%i
)
)
ECHO result=%mystring%=
您不需要整个脚本来完成此操作。您只需要一个单独的 for /f
循环即可。
C:\Users\rojo>set test=*10.*31.**2.*65
C:\Users\rojo>echo %test%
*10.*31.**2.*65
C:\Users\rojo>for /f "tokens=1-4 delims=.^*" %I in ("%test%") do @set test=%I.%J.%K.%L
C:\Users\rojo>echo %test%
10.31.2.65
如果您想将for
循环放入批处理脚本中,请使用%%I
,%%J
,%%K
和%%L
代替单个百分号。
set var=*10.*31.*2.*65
echo %var%>var.txt && powershell -command "(get-content var.txt) -replace '[\x2A]+', '' | set-content var.txt"
set /p var=<var.txt
echo %var%
echo %var%>var.txt && powershell -command "(get-content var.txt) -replace '[^\x30-x39\x2E]+', '' | set-content var.txt"
if exist var.txt del var.txt
command1 > file | command2
。 这有什么特别之处吗?&&
比|
更好吗? - mwfearnley@echo off
setlocal EnableDelayedExpansion
set "str=*10.*31.**2.*65"
set "char=" & set "repl=" & set "loc=0"
echo !str!
call :replace
echo !repl!
exit /b
:replace
set "char=!str:~%loc%,1!
if "!char!" == "" exit /b
if "!char!" equ "*" set "char=_"
set "repl=!repl!!char!"
set /a "loc+=1"
goto :replace
endlocal
这段代码将a替换为b字符:
Set search=%search:a=b%
*
。 - jeb看看sed,这是一个流编辑器。如果你使用的是Windows(假设你是),你可以在网上找到预编译的二进制文件。
echo "*10.31.*2.*65" | sed 's/\*//g'
*
是一个特殊字符,因此您无法使用%var:a = b%
语法。 - mwfearnley