Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Windows批处理文件删除/替换文本文件字符串_Windows_Batch File - Fatal编程技术网

使用Windows批处理文件删除/替换文本文件字符串

使用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尝试一些东西,但我不知道在替换为其他字符串时如何使

我想删除点后面的三个数字,或者如果比较容易的话,删除点后面和点之前的所有数字使用Windows批处理脚本

之前

ABC;CDEF;生长激素;123:456.XXX;EFG;789:123.XXX
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线的一部分,现在他们被取代;我的工作方案是为满足你的问题而设计的。你是否希望所有人都猜到你的文本文件内容与你的现实世界问题无关?@lalluvia
delims=应该可以解决这个问题。@Compo我的错误,没有意识到空格会是一个问题好把戏!使用
%%~nB
删除“扩展名”<代码>:)
+1我喜欢您的解决方案,它确实删除了.XXX。但我也有相同的空间在ABC,CDEF线的一部分,现在他们被取代;我的工作方案是为满足你的问题而设计的。你是否希望所有人都猜到你的文本文件内容与你的现实世界问题无关?@lalluvia
delims=应该可以解决这个问题。@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