Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.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 使用批处理脚本提取文件中的路径列表_Windows_For Loop_Batch File_Cmd - Fatal编程技术网

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或未来读者如何可以从一个伟大的、良好的和干净的启动/运行它。谢谢你,格哈德。