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
Windows 如何运行组合findstr脚本_Windows_Batch File_Findstr - Fatal编程技术网

Windows 如何运行组合findstr脚本

Windows 如何运行组合findstr脚本,windows,batch-file,findstr,Windows,Batch File,Findstr,嗨,我有一个脚本,我用第页上的信息 我意识到运行两个单独的批处理文件(:SetVar和:Brains)会起作用,但当我尝试将这两个文件合并为一个时,它就不起作用了 如果有人能向我解释为什么我的不起作用,告诉我我能做些什么让我的工作起作用,我会很高兴 :SetVar Brains "Hello" "Goodbye" "input.txt" > "newfile.txt" GOTO :Brains :Brains SETLOCAL ENABLEEXTENSIONS SETLOCAL DISA

嗨,我有一个脚本,我用第页上的信息

我意识到运行两个单独的批处理文件(
:SetVar
:Brains
)会起作用,但当我尝试将这两个文件合并为一个时,它就不起作用了

如果有人能向我解释为什么我的不起作用,告诉我我能做些什么让我的工作起作用,我会很高兴

:SetVar
Brains "Hello" "Goodbye" "input.txt" > "newfile.txt"
GOTO :Brains

:Brains
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
    set "line=%%B"
    if defined line (
        call set "line=echo.%%line:%~1=%~2%%"
        for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
    ) ELSE echo.
)
PAUSE
使用Call命令时:

call :SetVar
call :Brains
goto :eof
pause

:SetVar
:Brains "Hello" "Goodbye" "input.txt" > "newfile.txt"
goto :eof

:Brains
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
    set "line=%%B"
    if defined line (
        call set "line=echo.%%line:%~1=%~2%%"
        for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
    ) ELSE echo.
)
goto :eof
我没有得到错误,但我得到:

C:\Users\MALKAVIAN\Batch files\change words in file>CALL :SetVar

C:\Users\MALKAVIAN\Batch files\change words in file>goto :eof

C:\Users\MALKAVIAN\Batch files\change words in file>CALL :Brains

C:\Users\MALKAVIAN\Batch files\change words in file>goto :eof

C:\Users\MALKAVIAN\Batch files\change words in file>pause
Press any key to continue . . .

最后一次尝试,因为我是一个友好的人,想要帮助。。。获取此代码,将其放在批处理文件中,并将批处理文件放在与
input.txt
相同的目录中。将文本放入该文本文件,保存并运行脚本。它应该回显文档中写入的所有行,并在输出中将Hello更改为bye

您可以尝试此批处理文件:

我添加了第四个参数以在新文本文件中输出替换结果:

编辑

因此,作为一个示例,您可以找到子字符串
“http”
“https”

@echo关闭
设置“NewStr=https”
设置“infle=%~dp0%~n0\u InputTest.txt”
设置“OutPutFile=%~dp0%~n0_OutPutTest.txt”
如果存在“%infle%”删除“%infle%”
如果不存在“%infle%”,则调用:CreateExampleInputFile
调用:FindReplace“”%NewStr%“”%infle%
暂停
设置“OldStr=http”
调用:FindReplace“%OldStr%”%NewStr%”%infle%”%OutPutFile%
启动“”%OutPutFile%“
暂停并退出/b
::**************************************************************
:FindReplace
REM——准备命令处理器--
setLocalEnableExtensions
SETLOCAL DISABLEDELAYEDEXPANSION
::FindReplace-逐行解析文件并替换子字符串“
::语法:FindReplace
::OldStr[in]-要替换的字符串
::NewStr[in]-要替换为的字符串
::infle[in]-要分析的文件
::输出文件[out]-新输出文件
如果“%~1”==”findstr“^::”“%~f0”&转到:EOF
(
对于(“'type%3 | find/n/v”“”)do中的/f“tokens=1,*delims=]”%%A(
设置“行=%%B”
如果定义行(
调用集“line=echo.%%line:%%~1=%~2%%”
对于/f“delims=“%%X in”(““echo”。%%line%%”“”)do%%~X
)否则我会回应。
)
)>%4
退出/b
::**************************************************************
:CreateExampleInputFile
(
回音http://www.hyperdebrid.com
回音http://www.fakirdebrid.net
回音http://www.keepfiles.fr
回音http://www.4shared.com 
回音http://1fichier.com
回音http://www.mega.co.nz
回音http://www.mediafire.com
回音http://www.uploaded.net
回音http://www.oboom.com
回音http://www.letitbit.net
回音http://www.keep2share.cc
回音http://alfafile.net
回音http://www.bigfile.to
回音http://www.dailymotion.com
回音http://www.datafile.com
回音http://www.Depfile.com
回音http://www.Dropbox.com
回音http://www.Extmatrix.com
回音http://www.Fboom.me
回音http://www.Filefactory.com
回音http://www.Filesmonster.com
回音http://www.Fshare.vn
回音http://www.Keep2share.com
回音http://www.Mega.nz
回音http://www.Rapidgator.net
回音http://www.Scribd.com
回音http://www.Soundcloud.com
回音http://www.Speedyshare.com
回音http://www.Turbobit.net
回音http://www.Vimeo.com
)>“%infle%”
::**************************************************************

我希望这能帮助您解决问题

@ECHO关闭
SETLOCAL ENABLEEXTENSIONS DISABLEDELAYEDEXPANSION
呼叫:大脑“你好”“再见”“input.txt”
后藤:EOF
:大脑
如果“%~1”==”(FINDSTR/R“^::”%~f0”
暂停
后藤(EOF)

(对于('FIND/N/V”“^What specific“not work”?@geisterfurz007-我想运行两个脚本(在一个
.bat
文件中,而不是在两个文件中)还有同样的效果。我理解那部分,但是错误的效果是什么样子的?程序是否什么都不做,产生了错误的结果/与其他版本不同。顺便说一句,我很好奇第二行应该做什么。我不是真正的成批,所以这可能是一个愚蠢的问题…你可以试着在那之前打个电话t第二行(不是代替
GOTO
而是上面的行)空白cmd提示符。我尝试使用
call
命令调用
:SetVa
:Brains
,我按任意键继续,但没有如下错误:在问题的第一个代码块中,您有以下代码:
Brains“你好”“再见”input.txt“>”newfile.txt“
尝试将其更改为:
调用:Brains“Hello”“再见”input.txt"
EDIT:我对它进行了测试,它会回显input.txt中的所有行。我不确定这是否是期望的结果,但这就是它对更改的作用。您正在运行什么操作系统?@Malkavian Windows 7不工作,我得到一个空白的cmd窗口。当我仔细查看时,发现错误
进程试图写入一个不存在的管道。
我是r顺便问一下,正在运行windows 10。你是否尝试更改正则表达式字符,更具体地说是反斜杠?很好的文件!你是如何让它如此丰富多彩的?为什么是向下投票?我测试了它,它工作得非常好!
@echo off

:SetVar
call :Brains "Hello" "Goodbye" "input.txt"
GOTO :Brains

:Brains
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
    set "line=%%B"
    if defined line (
        call set "line=echo.%%line:%~1=%~2%%"
        for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
    ) ELSE echo.
)
PAUSE