
我们如何才能根据分隔符前一行中遇到的第一个单词对大量文件中的内容进行排序?在自定义排序顺序。
我将举例说明。假设我有数百个如下所示的文件(下面的文件故意设计得很短,实际上每个文件都有大约 100 个字段):
文件 1
headb_mask,*off
neck,models/players/az/hair1
headc_eyes,models/players/az/face_1
headc_face,models/players/az/face_1
torso_collar,*off
torso_hood,*off
torsoa,models/players/az/torso_1
r_arma,models/players/az/torso_1
l_arma,models/players/az/torso_1
文件 2
headb_mask,*off
headc_eyes,models/players/az/face_2
neck,models/players/az/hair1
headc_face,models/players/az/face_2
torso_collar,*off
torsoa,*off
torso_hood,models/players/az/torso_1
r_arma,models/players/az/torso_1
l_arma,models/players/az/torso_1
我希望他们都遵循这一点自定义排序顺序:
headc_eyes,
headc_face,
headb_mask,
neck,
torso_collar,
torso_hood,
torsoa,
l_arma,
r_arma
经过后处理的文件将如下所示:
文件 1
headc_eyes,models/players/az/face_1
headc_face,models/players/az/face_1
headb_mask,*off
neck,models/players/az/hair1
torso_collar,*off
torso_hood,*off
torsoa,models/players/az/torso_1
l_arma,models/players/az/torso_1
r_arma,models/players/az/torso_1
文件 2
headc_eyes,models/players/az/face_2
headc_face,models/players/az/face_2
headb_mask,*off
neck,models/players/az/hair1
torso_collar,*off
torso_hood,models/players/az/torso_1
torsoa,*off
l_arma,models/players/az/torso_1
r_arma,models/players/az/torso_1
我们该如何实现这一点?有数百个这样的文件,手动操作需要花费很多时间。任何技术都是好的。
答案1
@echo off && cd /d "%~dp0"
set "_TMPFile=%temp%\Some#_Uniq#_Name#_%Random%_."
set "_order=headc_eyes,headc_face,headb_mask,neck"
set "_order=%_order%,torso_collar,torso_hood"
set "_order=%_order%,torsoa,l_arma,r_arma"
for %%i in =;( *.txt );= do >"%_TMPFile%" =;( for %%# in =;( %_order%
);= do for /f useback^delims^= %%G in =;(` find.exe /i "%%~#" ^<"%%~i" `
);= do <nul set^ /p "`=%%~G" & echo/);= && move /y "%_TMPFile%" "%%~nxi"
- 或者...
@echo off && cd /d "%~dp0"
set "_order=dc,db,ck,ll,oo,oa,l_,r_"
set "_TMPFile=%temp%\Some#_Uniq#_Name#_%Random%_."
for %%i in =;( *.txt );= do >"%_TMPFile%" =;( for %%# in =;( %_order%
);= do for /f useback^delims^= %%G in =;(` find.exe /i "%%~#" ^<"%%~i" `
);= do <nul set^ /p "`=%%~G" & echo/);= && move /y "%_TMPFile%" "%%~nxi" >nul
定义您的订单并在循环中使用您的订单作为过滤器:
1.使用for
循环通过文本文件选择文件(%%~i
)
2.第二个for
循环将单独一行,用于过滤每个文件的行(%%~i
)每次一个有序项目(%%~G
)按自定义顺序
3.第三种方法for /f
将对每个文件应用一次一个匹配项 ( %%~#
) 作为已选定文件的过滤器,并根据逗号返回第一个匹配项
4.将输出重定向到临时文件(>TMPFile
),然后使用它替换原始文件move /y