Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.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 在使用for循环删除两个模式后,如何从命令输出中提取动态模式_Windows_For Loop_Batch File_Automation_Operating System - Fatal编程技术网

Windows 在使用for循环删除两个模式后,如何从命令输出中提取动态模式

Windows 在使用for循环删除两个模式后,如何从命令输出中提取动态模式,windows,for-loop,batch-file,automation,operating-system,Windows,For Loop,Batch File,Automation,Operating System,使用第一个“for”循环从输出中提取特定行,同时希望使用特定数量的文本进一步删除提取的输出,请在此方面提供帮助 for /f "tokens=* delims= " %i in ('dir /r ^| findstr -li "zone.id"') do @echo %i >> C:\zone.txt 上述循环的输出如下所示: 26 789A44F9D1497937126FF305C6CB89D0.ics:Zone.Identifier:$

使用第一个“for”循环从输出中提取特定行,同时希望使用特定数量的文本进一步删除提取的输出,请在此方面提供帮助

for /f "tokens=* delims= " %i in ('dir /r ^| findstr -li "zone.id"') do @echo %i >> C:\zone.txt
上述循环的输出如下所示:

 26 789A44F9D1497937126FF305C6CB89D0.ics:Zone.Identifier:$DATA 
 29 active.csv:Zone.Identifier:$DATA 
 26 file trans today.jpg:Zone.Identifier:$DATA 
 26 BC of raji.pdf:Zone.Identifier:$DATA 
 29 modern - Contest 2016 Submission_updated 2019 - july-10.pdf:Zone.Identifier:$DATA
 26 mesge_mon_results (1).csv:Zone.Identifier:$DATA 
 26 [MS-DoCTS].pdf:Zone.Identifier:$DATA 
我想删除26/29前后的空格,包括2位数字和:$DATA,并获得如下输出:

789A44F9D1497937126FF305C6CB89D0.ics:Zone.Identifier       
active.csv:Zone.Identifier        
file trans today.jpg:Zone.Identifier         
BC of raji.pdf:Zone.Identifier       
modern - Contest 2016 Submission_updated 2019 - july-10:Zone.Identifier       
mesge_mon_results (1).csv:Zone.Identifier      
[MS-DoCTS].pdf:Zone.Identifier 

  

尽管使用记事本中的“替换”选项可以很容易地完成,但我喜欢通过批处理脚本自动完成此操作。

您应该在vbscript中使用Regex,并使用类似以下代码的批处理文件:您可以看到

@echo关闭
模式85、20和颜色0A
使用正则表达式和vbscript替换标题字符串
设置“InputFile=%~dp0zone.txt”
设置“OutPutFile=%~dp0New\u Zone\u在\u replacement.txt之后”
回音(
::在控制台屏幕上显示结果
调用:搜索\u替换“%InputFile%”CON
::将结果写入新文件
调用:搜索\u替换“%InputFile%”“%OutPutFile%”
回音(
echo按任意键以在新文件中显示结果:
回显“%OutPutFile%”
暂停>nul
启动“”%OutPutFile%“
回音(
echo是否要更新和替换原始文件“%InputFile%”中的所有内容?
暂停>nul
移动/Y“%OutPutFile%”“%InputFile%”>nul
启动“”%InputFile%”并退出
::-----------------------------------------------------------------------------------
:搜索\u替换
(
echo WScript.StdOut.WriteLine搜索\u替换(数据^)
回波函数搜索\替换(数据^)
回声变暗模式、strReplace、strResult、oRegExp
echo Data=“%1”
echo Data=WScript.StdIn.ReadAll
echo strPattern=“\b(\d\d\s)(.*)(:\$DATA)”
echo strReplace=“$2”
echo Set oRegExp=New RegExp
echo oRegExp.Global=True
echo oRegExp.IgnoreCase=True
echo oRegExp.Pattern=strPattern
echo strResult=oRegExp.Replace(数据,strReplace^)
echo Search_Replace=strResult
回波结束函数
)>%tmp%\%~n0.vbs
cscript//nologo“%tmp%\%~n0.vbs”<“%~1”>“%~2”
如果存在“%tmp%\%~n0.vbs”Del“%tmp%\%~n0.vbs”
退出/B
::----------------------------------------------------------------------------------

编辑:在批处理文件中使用带有Powershell的正则表达式:

@echo关闭
标题搜索并替换为Powershell和批处理
设置“InputFile=%~dp0zone.txt”
设置“OutPutFile=%~dp0New\u zone.txt”
调用:搜索\u替换“%InputFile%”“%OutPutFile%”
如果存在“%OutPutFile%”,则启动“%OutPutFile%”
出口
雷姆-------------------------------------------------------------------------------------
:搜索\u替换
动力壳^
GC-path“%$1”^ |%{${uU-Replace'\b(\d\d\s^)(.*^)(:\$DATA^)',$2'}^ Out文件“%$2”
退出/B
雷姆-------------------------------------------------------------------------------------

只需做一个替换即可摆脱
:$DATA
。不过,您需要
延迟扩展

@echo off & setlocal enabledelayedexpansion
(for /f "tokens=1*" %%i in ('dir /r ^| findstr /IRC:"zone\.id"') do (
    set "line=%%~j"
    echo !line::$DATA=!
 )
)>C:\zone.txt
您也不需要使用
delims=“
,因为空白是默认的delimeter

还有一点需要注意,这需要进入批处理文件,而不是
cmd

如果您需要从
cmd
运行此命令,而不是从批处理文件运行此命令,则从cmd运行
cmd/V:ON
激活
delayedexpansion
,并使用此行:

for /f "tokens=1*" %i in ('dir /r ^| findstr /IRC:"zone\.id"') do set "line=%~j" & (echo !line::$DATA=!)>>C:\zone.txt

tokens=*
更改为
tokens=1*
echo%j
谢谢您的评论,Stephen在一系列尝试之间尝试了此操作..但仍然:$DATA stack behind:)感谢Hackoo提供的快速建议。我会试试这个。感谢Hackoo,基于powershell的脚本运行良好。感谢Gerhard的更正和解释。