使用Windows批处理文件删除/替换文本文件字符串
我想删除点后面的三个数字,或者如果比较容易的话,删除点后面和点之前的所有数字代码>使用Windows批处理脚本 之前 ABC;CDEF;生长激素;123:456.XXX;EFG;789:123.XXX使用Windows批处理文件删除/替换文本文件字符串,windows,batch-file,Windows,Batch File,我想删除点后面的三个数字,或者如果比较容易的话,删除点后面和点之前的所有数字使用Windows批处理脚本 之前 ABC;CDEF;生长激素;123:456.XXX;EFG;789:123.XXXABC;CDEF;生长激素;123:456.XXX;EFG;789:123.XXX 之后 ABC;CDEF;生长激素;123:456;EFG;789:123ABC;CDEF;生长激素;123:456;EFG;789:123 我一直在用myVar:~0,-4尝试一些东西,但我不知道在替换为其他字符串时如何使
ABC;CDEF;生长激素;123:456.XXX;EFG;789:123.XXX
之后 ABC;CDEF;生长激素;123:456;EFG;789:123
ABC;CDEF;生长激素;123:456;EFG;789:123
我一直在用
myVar:~0,-4
尝试一些东西,但我不知道在替换为其他字符串时如何使用它:
set "str=;"
for /f "tokens=* delims=." %%A in (%input%) do set myVar=%%A & echo !myVar:%myVar:~0,-4%=%str%! >> %output%
或
这将是我的第一次尝试-假设您的结构正好包含2个
字符,每个字符后跟3个要删除的字符
或
这将是我的第一次尝试-假设您的结构正好包含2个
字符,每个字符后面有3个要删除的字符。此方法适用于任何位置上放置的任意数量的点:
@echo off
setlocal EnableDelayedExpansion
rem Get file lines
(for /F "delims=" %%a in (input.txt) do (
rem Split line at dots
set "line=%%a"
set "myVar="
for %%b in ("!line:.=" "!") do (
if not defined myVar (
rem Copy first part
set "myVar=%%~b"
) else (
rem Eliminate first three chars from rest of parts
set "part=%%~b"
set "myVar=!myVar!!part:~3!"
)
)
echo !myVar!
)) > output.txt
此方法适用于放置在任何位置的任意数量的点:
@echo off
setlocal EnableDelayedExpansion
rem Get file lines
(for /F "delims=" %%a in (input.txt) do (
rem Split line at dots
set "line=%%a"
set "myVar="
for %%b in ("!line:.=" "!") do (
if not defined myVar (
rem Copy first part
set "myVar=%%~b"
) else (
rem Eliminate first three chars from rest of parts
set "part=%%~b"
set "myVar=!myVar!!part:~3!"
)
)
echo !myVar!
)) > output.txt
使用您的示例,此方法不需要知道令牌计数
@Echo关闭
SetLocal EnableDelayedExpansion
复制/Y“input.txt”和“output.txt”>Nul
(对于/F“UseBackQDelims=“%A In”(“output.txt”)Do(Set“OL=”)
对于(%%A)中的%%B,请设置“OL=!OL!;%%~nB”
Echo=!OL:~1!)>“input.txt”
::Del“output.txt”
暂停
如果您对input.txt的内容满意,可以从第7行
中删除前两个字符。如果没有,不要担心会丢失任何内容,您可以删除input.txt
并将output.txt
重命名为input.txt
我使用了input.txt
和output.txt
,请根据需要调整这两个名称使用您的示例此方法不需要知道令牌计数
@Echo关闭
SetLocal EnableDelayedExpansion
复制/Y“input.txt”和“output.txt”>Nul
(对于/F“UseBackQDelims=“%A In”(“output.txt”)Do(Set“OL=”)
对于(%%A)中的%%B,请设置“OL=!OL!;%%~nB”
Echo=!OL:~1!)>“input.txt”
::Del“output.txt”
暂停
如果您对input.txt的内容满意,可以从第7行
中删除前两个字符。如果没有,不要担心会丢失任何内容,您可以删除input.txt
并将output.txt
重命名为input.txt
我使用了input.txt
和output.txt
,请根据需要调整这两个名称字符串中是否包含星号?@GerhardBarnard我认为这是试图使.xxx
bold@Magoo我也是这么想的。好主意@magoo字符串是否真的包含星号?@GerhardBarnard我想说这是一次尝试使.xxx
bold@Magoo我也是这么想的。好主意@magoood把戏!使用%%~nB
删除“扩展名”<代码>:)
+1我喜欢您的解决方案,它确实删除了.XXX。但我也有相同的空间在ABC,CDEF线的一部分,现在他们被取代;我的工作方案是为满足你的问题而设计的。你是否希望所有人都猜到你的文本文件内容与你的现实世界问题无关?@lalluviadelims=代码>应该可以解决这个问题。@Compo我的错误,没有意识到空格会是一个问题好把戏!使用%%~nB
删除“扩展名”<代码>:)
+1我喜欢您的解决方案,它确实删除了.XXX。但我也有相同的空间在ABC,CDEF线的一部分,现在他们被取代;我的工作方案是为满足你的问题而设计的。你是否希望所有人都猜到你的文本文件内容与你的现实世界问题无关?@lalluviadelims=代码>应该可以解决这个问题。@Compo我的错误,没有意识到空格会是个问题
@echo off
setlocal EnableDelayedExpansion
rem Get file lines
(for /F "delims=" %%a in (input.txt) do (
rem Split line at dots
set "line=%%a"
set "myVar="
for %%b in ("!line:.=" "!") do (
if not defined myVar (
rem Copy first part
set "myVar=%%~b"
) else (
rem Eliminate first three chars from rest of parts
set "part=%%~b"
set "myVar=!myVar!!part:~3!"
)
)
echo !myVar!
)) > output.txt