首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何运行组合findstr脚本

如何运行组合findstr脚本
EN

Stack Overflow用户
提问于 2016-09-20 07:21:03
回答 3查看 498关注 0票数 2

嗨,我有一个脚本,我用页面上的信息制作的。

我意识到运行两个单独的批处理文件(:SetVar:Brains)是可行的,但是当我试图将这两个文件合并为一个时,它就不能工作了。

如果有人能向我解释我的不起作用的原因,并向我展示我能做些什么使我的工作正常,我会很高兴的。

代码语言:javascript
复制
: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命令时:

代码语言:javascript
复制
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

我没有错误,但我得到了:

代码语言:javascript
复制
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 . . .
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-20 08:57:30

您可以尝试这个批处理文件:

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

编辑

因此,作为一个示例,您可以找到要由"http"替换的子字符串"https"

代码语言:javascript
复制
@echo off
set "NewStr=https"
set "InFile=%~dp0%~n0_InputTest.txt"
set "OutPutFile=%~dp0%~n0_OutPutTest.txt"
If Exist "%InFile%" Del "%InFile%"
If Not Exist "%InFile%" Call :CreateExampleInputFile
Call :FindReplace "" "%NewStr%" "%InFile%"
pause
set "OldStr=http"
Call :FindReplace "%OldStr%" "%NewStr%" "%InFile%" "%OutPutFile%"
Start "" "%OutPutFile%"
Pause & Exit /b
::**************************************************************
:FindReplace <OldStr> <NewStr> <InFile> <OutPutFile>
REM -- Prepare the Command Processor --
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
::FindReplace - parses a File line by line and replaces a substring"
::syntax: FindReplace <OldStr> <NewStr> <InFile> <OutPutFile>
::          OldStr [in] - string to be replaced
::          NewStr [in] - string to replace with
::          InFile [in] - file to be parsed
::          OutFile[out] - New output file
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.
    )
)>%4
Exit /b
::**************************************************************
:CreateExampleInputFile
(
    echo http://www.hyperdebrid.com
    echo http://www.fakirdebrid.net
    echo http://www.keepfiles.fr
    echo http://www.4shared.com 
    echo http://1fichier.com
    echo http://www.mega.co.nz
    echo http://www.mediafire.com
    echo http://www.uploaded.net
    echo http://www.oboom.com
    echo http://www.letitbit.net
    echo http://www.keep2share.cc
    echo http://alfafile.net
    echo http://www.bigfile.to
    echo http://www.dailymotion.com
    echo http://www.datafile.com
    echo http://www.Depfile.com
    echo http://www.Dropbox.com
    echo http://www.Extmatrix.com
    echo http://www.Fboom.me
    echo http://www.Filefactory.com
    echo http://www.Filesmonster.com
    echo http://www.Fshare.vn
    echo http://www.Keep2share.com
    echo http://www.Mega.nz
    echo http://www.Rapidgator.net
    echo http://www.Scribd.com
    echo http://www.Soundcloud.com
    echo http://www.Speedyshare.com
    echo http://www.Turbobit.net
    echo http://www.Vimeo.com
 )>"%InFile%"
 ::**************************************************************
票数 2
EN

Stack Overflow用户

发布于 2016-09-20 09:10:38

我希望这能帮你解决问题。

代码语言:javascript
复制
@ECHO OFF
SETLOCAL ENABLEEXTENSIONS DISABLEDELAYEDEXPANSION

CALL :Brains "Hello" "Goodbye" "input.txt"
GOTO :EOF

:Brains
IF "%~1"=="" (FINDSTR/R "^::" "%~f0"
    PAUSE
    GOTO :EOF)
(FOR /F "TOKENS=1* DELIMS=]" %%A IN ('FIND /N /V ""^<%3') DO (IF "%%~B" EQU "" (
            ECHO=) ELSE (SET "line=%%B"
            CALL ECHO=%%line:%~1=%~2%%)))>"newfile.txt"
PAUSE
票数 1
EN

Stack Overflow用户

发布于 2016-09-20 08:40:12

代码语言:javascript
复制
@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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39588002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档