【问题标题】:How to replace a group of characters of a word in a text file using batch script?如何使用批处理脚本替换文本文件中单词的一组字符?
【发布时间】:2017-10-03 15:39:16
【问题描述】:

已编辑**
我有一个名为 sample.txt 的文本文件,它会不断更新。它包含各种路径名:

C:/users/admin/abc
C:/users/admin/xyz
C:/users/admin/jkl
C:/users/admin/mno
...
...

我想将“admin”替换为“admin1”并将该文件保存在 sample1.txt
我试着用这个:

y = admin1  
FOR /F "tokens=* delims=/" %%x in (sample.txt) DO ^  
if %%x==admin (%%y > sample1.txt) else (%%x > sample1.txt)

我的输出应该在 sample1.txt 中:

C:/users/admin1/abc
C:/users/admin1/xyz
C:/users/admin1/jkl
C:/users/admin1/mno

【问题讨论】:

  • 接受这个问题的答案。

标签: batch-file


【解决方案1】:

这个简单的批处理文件可以吗?

@(For /F "Delims=" %%A In ('Find /I "/admin/"^<"sample.txt"'
) Do @Set "_=%%A"&@Call Echo %%_:/admin/=/admin1/%%)>"sample1.txt"

编辑以下可能不太容易受到sample.txt中毒字符的影响

@(For /F "Delims=" %%A In ('Find /I "/admin/"^<"sample.txt"'
) Do @Set "_=%%A"&Call Set/P "_=%%_:/admin/=/admin1/%%"<Nul&Echo()>"sample1.txt"

【讨论】:

  • 嘿,我认为它工作得很好,但是当我尝试将文件名设置为“C:/users/admin/a&c”时我发现了一个小故障......它不适用于这个。你能告诉我如何纠正
  • TBF,我的建议是永远不要使用可能导致问题的字符命名任何目录或文件,这就是其中之一!您可以使用插入符号 ^ 转义 & 符号 &amp;,但我的建议是 sample.txt 中的所有路径都应该用双引号引起来,@ 987654327@。我用一个看起来很尴尬的解决方法编辑了我的帖子,但它可能更适合你的目的。
【解决方案2】:

您可以为 bash 执行以下操作

#!/bin/bash
set -e

declare -a myarray
readarray myarray < file_pathname # Include newline.
readarray -t myarray < file_pathname # Exclude newline.
new_string=admin1

for s in ${myarray[@]}; do
  echo $s;
  echo ${s/admin/$new_string}
done

【讨论】:

  • 文本文件不断更新,所以每次结束值 "/abc" ,"/xyz" 等都会不断更新。所以我将无法使用它
  • 我不明白你的意思。它可以满足您的需求,将 admin 替换为 admin1
  • 是的,它会起作用。但我的文本文件不断更新,并且在文本文件中有许多这样的路径名。
  • 我的文本文件可以是:C:/users/admin/abc C:/users/admin/xyz C:/users/admin/jkl C:/users/admin/mno C:/users /admin/asd C:/users/admin/asdasd C:/users/admin/jasdasdkl C:/users/admin/asasd
  • 只要用换行符隔开没关系,
猜你喜欢
  • 1970-01-01
  • 2020-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多