
BAT批量分析并整理CAD圖紙內(nèi)包含的工程項(xiàng)目【用PowerShell已完美解決】最后由 xy506 于 -8-29 19:25一、需求起因:手上有大量CAD圖紙、圖紙文件內(nèi)包含不定量工程項(xiàng)目的圖紙。現(xiàn)需要整理出每個(gè)圖紙文件中包含有哪些工程項(xiàng)目。示例圖紙包:鏈接: https://pan.baidu.com/s/1mIsue6Ek-GhwaKhNVMVpAg 密碼: cri3二、解決思路:1、先通過(guò)AcmeCADConverter_Por軟件將DWG格式的圖紙轉(zhuǎn)換為DXF文件,并將DXF文件絕對(duì)路徑導(dǎo)出至:文件列表.txt。AcmeCADConverter_Por下載地址:
鏈接: https://pan.baidu.com/s/1P9WMulPuK0c3EqeaGdd0eQ 密碼: qi242、然后通過(guò)批處理將DXF文件作為文本文檔處理,提取出包含“工程”、“圖”的文本行并另存為以DXF圖紙文件名命名的TXT文檔內(nèi)。批處理代碼如下:
3、通過(guò)批處理將以DXF圖紙文件名命名的TXT文檔內(nèi)重復(fù)的行、不符合要求的行刪除并不保留空行。去除重復(fù)行功能謝謝管理員在三樓給出的代碼試用后成功處理了重復(fù)行代碼:nclick="copycode($('code0'));">復(fù)制代碼
- @echo off & setlocal EnableDelayedExpansion
- set j=0
- for /f delims= %%i in (文件列表.txt) do (
- set /a j+=1
- set con!j!=%%i
- call set a=%%con!j!%%
- type !a! | find 工程 >> !a!.txt
- type !a! | find 圖 >> !a!.txt
- @echo off
- )
現(xiàn)在還差去除不需要的數(shù)據(jù)了。去除不需要的數(shù)據(jù),個(gè)人想法:3.1、刪除每一行內(nèi)多余的空格,3.2、刪除少于6個(gè)漢子內(nèi)容的行,3.3、刪除數(shù)據(jù)鏈接^、C:或者D:等盤(pán)符地址開(kāi)頭的行3.4、提取:“((frame .”開(kāi)頭的行中(PLOTFILEPREFIX . ******(工程名稱(chēng))******_)這一段雙引號(hào)內(nèi)的內(nèi)容其余部分刪除4、將整理好的文本文檔處理為電子表格,第一列為文件名,后面依次填寫(xiě)文件內(nèi)包含的工程名稱(chēng)。三、遇到的問(wèn)題:1、在處理TXT文檔內(nèi)重復(fù)的行、不符合要求的行刪除并不保留空行時(shí),單個(gè)文檔可以處理,但是用變量批處理就不行了。單個(gè)處理代碼如下nclick="copycode($('code1'));">復(fù)制代碼
- @echo off
- md 去重之后的文件
- for /f delims= %%i in ('dir /b /s *.txt') do (
- echo 正在處理文件 %%i
- setlocal
- (for /f delims= %%a in ('type %%i') do (
- if not defined _%%a (
- echo,%%a
- set _%%a=1
- )
- ))>去重之后的文件%%~ni.log
- endlocal
- )
2、如何按條件刪除不符合條件的行的代碼也不會(huì)寫(xiě)。3、如何將大量TXT文檔處理成電子表格也暫時(shí)沒(méi)想到解決辦法。謝謝論壇里的大神~~問(wèn)題解決了~附上最終代碼:nclick="copycode($('code2'));">復(fù)制代碼
- @echo off
- (for /f delims= %%i in (XXX.txt) do findstr %%i XXX2.txt>nul||echo %%i)>XXX2.txt
- )
- pause
- $start = Get-Date #記錄腳本開(kāi)始執(zhí)行時(shí)間
- ForEach( $file In (dir *.dxf) ) {#這里加了雙引號(hào),不加雙引號(hào)的時(shí)候會(huì)出現(xiàn)找不到路徑報(bào)錯(cuò)
- $arr = [IO.File]::ReadAllLines($file, [Text.Encoding]::Default);
- $arr = $arr -match '工程|圖' -replace 's+';#匹配包含工程 或 圖的行、刪除空格
- $arr = $arr -replace '^((frame.*PLOTFILEPREFIX.([^]+).*$', '$1';
- $arr = $arr -NotMatch '^.{1,5}$|數(shù)據(jù)

