wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Windows Batch读取文件并将行解析为标记和变量大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

通过搜索这个网站并学习 Windows批处理脚本的荒谬语言,我取得了很大的进展,但我现在处于一个被困的地步.我有一个文本文件,行数可变,每个行看起来像: AA8315,"United States",N777AN,"American Airlines",AAL98,B772,"boeing 777-223",AAL,"2013-06-11 23:30:47.923","2013-06-12 00:
通过搜索这个网站并学习 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:\Kinetic\BaseStation\Basestation.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,"@R_772_7138@ 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 Batch读取文件并将行解析为标记和变量全部内容,希望文章能够帮你解决Windows Batch读取文件并将行解析为标记和变量所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。