Windows Batch读取文件并将行解析为标记和变量
发布时间:2020-12-14 02:03:41 所属栏目:Windows 来源:网络整理
导读:通过搜索这个网站并学习 Windows批处理脚本的荒谬语言,我取得了很大的进展,但我现在处于一个被困的地步.我有一个文本文件,行数可变,每个行看起来像: AA8315,"United States",N777AN,"American Airlines",AAL98,B772,"Boeing 777-223",AAL,"2013-06-11 23:30
通过搜索这个网站并学习
Windows批处理脚本的荒谬语言,我取得了很大的进展,但我现在处于一个被困的地步.我有一个文本文件,行数可变,每个行看起来像:
AA8315,"United States",N777AN,"American Airlines",AAL98,B772,"Boeing 777-223",AAL,"2013-06-11 23:30:47.923","2013-06-12 00:01:14.459" 我的批处理文件: set THEDATE=2013-06-12 set THEDATABASE=c:KineticBaseStationBasestation.sqb set THECSVFILE=c:Flights.csv set THEOUTPUTFILE=c:FlightsNew.csv set THISLINE="" if exist %THECSVFILE% del %THECSVFILE% if exist %THEOUTPUTFILE% del %THEOUTPUTFILE% :: allow time for the csv file to be deleted timeout /t 2 /nobreak c:sqlite3.exe -header -csv %THEDATABASE% "select Aircraft.ModeS,Aircraft.ModeSCountry as Country,Aircraft.Registration as Reg,Aircraft.RegisteredOwners as Owner,Flights.Callsign,Aircraft.ICAOTypeCode as Type,Aircraft.Type as Model,Aircraft.OperatorFlagCode as 'Op Flag',Flights.StartTime as 'First Seen',Flights.EndTime as 'Last Seen' from Aircraft INNER JOIN Flights ON (Aircraft.AircraftID=Flights.AircraftID) where Flights.EndTime like '%THEDATE% %%' order by Flights.EndTime DESC;" >> %THECSVFILE% ::allow time for the csv to be written to file timeout /t 5 /nobreak ::read %THECSVFILE% and loop through each line for /F "usebackq tokens=* delims=" %%A in (%THECSVFILE%) do ( set the_line=%%A call :process_line ) :process_line for /F "usebackq tokens=1,2,3,4,5,6,7,8,9,10 delims=[,]" %%1 in (%the_line%) do ( set hexcode=%%1 set country=%%2 set reg=%%3 set owner=%%4 set callsign=%%5 set planetype=%%6 set model=%%7 set opflag=%%8 set firstseen=%%9 set lastseen=%%10 set THISLINE=%hexcode%,%country%,%reg%,%owner%,%callsign%,%planetype%,%model%,%opflag%,%firstseen%,%lastseen% echo %THISLINE% > %THEOUTPUTFILE% ) (我将令牌分配给变量,因为我将在以后进行额外的验证和格式化.我需要先让这部分工作!) 执行时,脚本确实循环遍历文件的每一行,但它似乎没有将%% 1分配给变量hexcode. 执行命令的输出如下所示: C:&;for /F "usebackq tokens=1,]" %1 in (AA8315 "United States" N777AN "American Airlines" AAL98 B772 "Boeing 777-223" AAL "2013-06-11 23:30:47.923" "2013-06-12 00:01:14.459") do ( set hexcode=%1 set country=%2 set reg=%3 set owner=%4 set callsign=%5 set planetype=%6 set model=%7 set opflag=%8 set firstseen=%9 set lastseen=%10 set THISLINE=,N807FD,"Fedex Express",FDX1378,"Airbus A310-324",FDX,"2013-06-12 22:56:54.639","2013-06-12 23:05:31.822" echo "" 1>c:FlightsNew.csv ) The system cannot find the file AA8315. 任何帮助是极大的赞赏! 解决方法
我总是遇到for循环中逗号分隔值的问题.以下是我为使您的代码工作所做的工作.
的test.txt AA8315,"2013-06-12 00:01:14.459" BatchFile.bat set THECSVFILE=test.txt ::read %THECSVFILE% and loop through each line for /F "usebackq tokens=* delims=" %%A in (%THECSVFILE%) do ( set the_line=%%A call :process_line ) goto TheEnd :process_line for /F "usebackq tokens=1,10 delims=~" %%1 in ('%the_line:,=~%') do ( set hexcode=%%1 set country=%%2 set reg=%%3 set owner=%%4 set callsign=%%5 set planetype=%%6 set model=%%7 set opflag=%%8 set firstseen=%%9 set lastseen=%%10 set THISLINE=%hexcode%,%lastseen% echo %THISLINE% > %THEOUTPUTFILE% ) :TheEnd 注意:process_line for循环.我不得不在%the_line%周围添加单引号,因此它没有尝试将字符串解释为文件名.然后我用?字符替换了所有逗号,并使用?字符作为分隔符.它可能无法准确处理所有数据(如果它包含单引号或?字符),但它确实可以使用这一条记录并让您再次朝着正确的方向前进. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Windows将凭据传播到Java桌面应用程序
- Windows下使用TortoiseGit的无法直接使用linux ssh-key的解
- 如何在Windows上修补?
- active-directory – 有没有Sysinternals ADInsight的替代品
- 我可以在Windows XP上将所有“自动”服务设置为“手动”吗?
- winapi – 如何在调整win32窗口大小时绘制OpenGL内容
- 无法使用PowerShell连接到Office 365
- Windows的“man”程序在哪里(打开UNIX手册页的程序)?
- exchange-2007 – 重新启动时禁用Server 2008服务
- windows-server-2008-r2 – 安装Server 2008 R2 SP1后没有R
推荐文章
站长推荐
热点阅读