Windows 使用批处理脚本提取文件中的路径列表
这是我的文本文件:Windows 使用批处理脚本提取文件中的路径列表,windows,for-loop,batch-file,cmd,Windows,For Loop,Batch File,Cmd,这是我的文本文件: ================================================== Folder : D:\T\New folder ================================================== ================================================== Folder : D:\T\Z-Ai ====================
==================================================
Folder : D:\T\New folder
==================================================
==================================================
Folder : D:\T\Z-Ai
==================================================
==================================================
Folder : D:\T\Z-BiN
==================================================
我需要从该文件中提取路径,因此我有如下内容:
D:\T\New folder
D:\T\Z-Ai
D:\T\Z-BiN
似乎我应该使用findstr TargetWord TargetFile.txt
命令。而且我似乎可以这样使用正则表达式:findstr/r“^[a-z][a-z]$^[a-z][a-z][a-z]$”
但我不知道如何循环找到的目标或获取输出列表。非常感谢您的帮助 用于Windows。您可以使用powershell
select-string -Path c:\tmp\file.txt -Pattern '[A-Z]:(\\[0-9\ A-Za-z\-]*)+' -AllMatches | % { $_.Matches } | % { $_.Value }
根据您的评论,您希望使用结果来执行xcopy任务,似乎您真的想要这样的东西。注意:我使用了
example.txt
作为输入文件,并将DESTINATION
添加到您应该添加目的地的位置,包括您需要的相关xcopy
开关:
@echo off
for /f "tokens=2*" %%i in ('type example.txt ^| findstr /i ":\\"') do xcopy "%%~j\*" DESTINATION
或者,我们可以直接在文件夹上使用findstr
@echo off
for /f "tokens=2*" %%i in ('type example.txt ^| findstr /i "Folder"') do xcopy "%%~j\*" DESTINATION
您可以这样做:
@echo off
Title Extract list of path in a file using batch script
set "TxtList=MyList.txt"
Set "OutPutData=Output.txt"
Call :Extract "%TxtList%" "%OutPutData%"
Start "" "%OutPutData%"
Exit
::*****************************************************
:Extract <InputData> <OutPutData>
(
echo Data = WScript.StdIn.ReadAll
echo Data = Extract(Data,"[\w]:(\\[0-9\sA-Za-z\-]*)+"^)
echo WScript.StdOut.WriteLine Data
echo '************************************************
echo Function Extract(Data,Pattern^)
echo Dim oRE,oMatches,Match,Line
echo set oRE = New RegExp
echo oRE.IgnoreCase = True
echo oRE.Global = True
echo oRE.Pattern = Pattern
echo set oMatches = oRE.Execute(Data^)
echo If not isEmpty(oMatches^) then
echo For Each Match in oMatches
echo Line = Line ^& Trim(Match.Value^) ^& vbcrlf
echo Next
echo Extract = Line
echo End if
echo End Function
echo '************************************************
)>"%tmp%\%~n0.vbs"
cscript /nologo "%tmp%\%~n0.vbs" < "%~1" > "%~2"
If Exist "%tmp%\%~n0.vbs" Del "%tmp%\%~n0.vbs"
exit /b
::****************************************************
@echo关闭
标题使用批处理脚本提取文件中的路径列表
设置“TxtList=MyList.txt”
设置“OutPutData=Output.txt”
调用:提取“%TxtList%”%OutPutData%
启动“”%OutPutData%“
出口
::*****************************************************
:摘录
(
echo Data=WScript.StdIn.ReadAll
回波数据=提取(数据,“[\w]:(\\[0-9\sA-Za-z\-]*)+”^)
echo WScript.StdOut.WriteLine数据
回声'************************************************
回波函数提取(数据,模式^)
回声暗淡的矿石、奥马奇、火柴、线
echo set oRE=New RegExp
echo oRE.IgnoreCase=True
echo.Global=True
回声模式=模式
echo set oMatches=oRE.Execute(数据^)
回声如果不是空的(oMatches^),则
oMatches中的每一场比赛的回声
回显行=行^&修剪(Match.Value^)^&vbcrlf
下一个回声
回波提取=线路
回显结束if
回波结束函数
回声'************************************************
)>%tmp%\%~n0.vbs
cscript/nologo“%tmp%\%~n0.vbs”<“%~1”>“%~2”
如果存在“%tmp%\%~n0.vbs”Del“%tmp%\%~n0.vbs”
退出/b
::****************************************************
在我看来,For/F
是完成任务所需的全部。尽管在某些情况下使用类型
可能有用,但此任务不需要使用find.exe
或findstr.exe
,因为您不需要匹配特定的全局/模式:
@For/F“EOL==Tokens=2*UseBackQ”%%A In(“TargetFile.txt”)Do@“%\uuuu AppDir\uuuuuu%xcopy.exe”“%%B”“Destination\”/Options
请注意,如果一个或多个文件夹
s可能不存在,则最好使用if exist“%%B\”
进行预处理。重要的是,如果包含文件夹路径的每一行都将空格填充到其行的末尾,此解决方案将不适用于您。findstr/r“^[a-z][a-z]$^[a-z][a-z][a-z]$”outputfile.txt
这很简单,但您想对结果做什么我不确定,请澄清,我可以给你看一个例子。@GerhardBarnard我需要使用xcopy将文件夹的所有内容复制到另一个文件夹中one@GerhardBarnard是的,输出文件与我显示的完全相同。好的,请参阅下面的答案。无法识别cat。我明白了。这是windows:从技术上讲,这个答案与问题的标签并不匹配。为了使它被认为是相关的,您可能希望考虑调整它,提供信息或显示OP或未来读者如何可以从一个伟大的、良好的和干净的启动/运行它。谢谢你,格哈德。