这是我的文本文件:
==================================================
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]$"
但是我不知道如何遍历找到的目标或获取输出列表。任何帮助都非常感谢。
答案 0 :(得分:1)
根据您的评论,您想使用结果执行xcopy任务,看来您确实想要这样的东西。请注意,我使用example.txt
作为输入文件,使用DESTINATION
作为目的地,其中包括您需要的相关xcopy
开关:
@echo off
for /f "tokens=2*" %%i in ('type example.txt ^| findstr /i ":\\"') do xcopy "%%~j\*" DESTINATION
或者,我们可以直接在findstr
上使用Folder
@echo off
for /f "tokens=2*" %%i in ('type example.txt ^| findstr /i "Folder"') do xcopy "%%~j\*" DESTINATION
答案 1 :(得分:1)
您可以这样:
@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
::****************************************************
答案 2 :(得分:0)
对于Windows。您可以使用Powershell。
select-string -Path c:\tmp\file.txt -Pattern '[A-Z]:(\\[0-9\ A-Za-z\-]*)+' -AllMatches | % { $_.Matches } | % { $_.Value }
答案 3 :(得分:0)
在我看来,For /F
是完成任务所需的全部。 尽管在某些情况下使用Type
可能很有用,但此任务无需使用find.exe
或findstr.exe
,因为您不需要匹配特定的glob / pattern < / em>:
@For /F "EOL==Tokens=2*UseBackQ" %%A In ("TargetFile.txt")Do @"%__AppDir__%xcopy.exe" "%%B" "Destination\" /Options
请注意,如果这些Folder
中的一个或多个不存在,则最好使用If Exist "%%B\"
。重要的是,如果每行包含Folder
路径的行都被填充到行尾,则此解决方案将对您不起作用。