Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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
Batch file 我正在编写一个.bat程序,在不改变文件位置的情况下查找和替换文件中的文本_Batch File - Fatal编程技术网

Batch file 我正在编写一个.bat程序,在不改变文件位置的情况下查找和替换文件中的文本

Batch file 我正在编写一个.bat程序,在不改变文件位置的情况下查找和替换文件中的文本,batch-file,Batch File,我正在编写一个.bat程序,它将查找并替换文件中的文本。我遇到的问题是,它删除了空行,留下来证明其他行的合理性。我需要空白行保留和新的文本留在同一地点。这是我写的,也是结果。谁能帮忙吗 节目: @ECHO OFF cls cd\ c: setLocal EnableDelayedExpansion For /f "tokens=* delims= " %%a in (samplefile.tx) do ( Set str=%%a set str=!str:day=night! set str=

我正在编写一个.bat程序,它将查找并替换文件中的文本。我遇到的问题是,它删除了空行,留下来证明其他行的合理性。我需要空白行保留和新的文本留在同一地点。这是我写的,也是结果。谁能帮忙吗

节目:

@ECHO OFF
cls
cd\
c:
setLocal EnableDelayedExpansion
For /f "tokens=* delims= " %%a in (samplefile.tx) do (
Set str=%%a

set str=!str:day=night!
set str=!str:winter=summer!

echo !str!>>samplefile2.txt)
ENDLOCAL
cls
exit
样本文件:

this line is the first line in my file that I am using as an example.This is made up text

the cat in the hat

             day
                      winter
结果如下:

this line is the first line in my file that I am using as an example.This is made up text
the cat in the hat
night
summer
我需要的行,空格和新的文本保持在相同的位置,而使文本替换。请帮助

@ECHO关闭
SETLOCAL
(
对于('find/n/v”“q27459813.txt')中的/f“tokens=1*delims=]”%%a(
设置“行=%%b”
如果定义了行(调用:subs)或ELSE(ECHO()
)
)>newfile.txt
后藤:EOF
:潜艇
设置“行=%line:day=night%”
设置“行=%line:winter=summer%”
回音(%line%)
后藤:eof
这应该对你有用。我使用了一个名为
q27459813.txt
的文件,其中包含用于测试的数据

生成newfile.txt

如果数据文件行开始
]
将无法正常工作


修改为允许前导
]

@ECHO关闭
SETLOCAL
(
对于/f“delims=“%%a IN('type q27459813.txt^ find/n/v”“)DO(
设置“行=%%a”
呼叫:潜艇
)
)>newfile.txt
后藤:EOF
:潜艇
设置“行=%line:*]=%”
如果未定义行回显(&GOTO):EOF
设置“行=%line:day=night%”
设置“行=%line:winter=summer%”
回音(%line%)
后藤:eof
  • 使用
    “tokens=*delims=“
    将修剪前导空格。相反,使用
    “delims=“
    保留前导空格
  • FOR/F总是跳过空行。诀窍是在每行前面插入一些内容。通常使用
    FIND
    FINDSTR
    在每行前面插入行号
  • 您可以使用
    !var:::=!
    从FINDSTR中删除行号前缀
  • 使用
    echo(!str!
    防止行为空时
    echo关闭
    消息
  • 只重定向一次更有效(更快)
@echo关闭
setlocal enableDelayedExpansion
>samplefile2.txt(
对于/f“delims=“%%A in('findstr/n“^”samplefile.txt'),请执行以下操作:(
设置“str=%%A”
设置“str=!str::=!”
设置“str=!str:day=night!”
设置“str=!str:winter=summer!”
回声(!str!
)
)
这仍然有一个潜在的问题。当由于延迟扩展而扩展
%%a
时,它将损坏包含
的行。诀窍是在循环中打开和关闭延迟扩展

@echo off
setlocal disableDelayedExpansion
>samplefile2.txt (
  for /f "delims=" %%A in ('findstr /n "^" samplefile.txt') do (
    set "str=%%A"
    setlocal enableDelayedExpansion
    set "str=!str:*:=!"
    set "str=!str:day=night!"
    set "str=!str:winter=summer!"
    echo(!str!
    endlocal
  )
)
或者,您可以完全忘记自定义批处理,使用my获得更简单、更快的解决方案。可以选择指定多个文字搜索/替换对

jrepl "day winter" "night summer" /t " " /l /i /f sampleFile.txt /o sampleFile2.txt

我使用了
/I
选项使搜索不区分大小写。但如果愿意,您可以放弃该选项使其区分大小写。使用纯批处理无法轻松做到这一点。

非常感谢大家……我将尝试一下!