使用批处理脚本提取文件中的路径列表

时间:2019-12-03 05:40:18

标签: windows for-loop batch-file cmd

这是我的文本文件:

==================================================
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]$"

但是我不知道如何遍历找到的目标或获取输出列表。任何帮助都非常感谢。

4 个答案:

答案 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.exefindstr.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路径的行都被填充到行尾,则此解决方案将对您不起作用。