零部件计算器 (CMD版)

前言:

此为备忘篇,零部件计算器已经用VBA制作了Excel版,CMD版后序几乎很少用到。但是其使用到的代码对文件新建复制整理重命名等仍有一定作用。

今年六七月份时,由于工作以来经常使用Excel计算单元体零部件数量,于是学了下Cmd/Bat,用Cmd/Bat批处理做的一个单元体零部件计算器,运行效率不高,需要几十秒时间计算。主要使用了Bat的判断/循环/进度条等功能制作。另外最近学了下 VBA,用Excel 制作了类似工具,使用了数组与字典,计算速度达到了0.5秒以内,稍后发布。

1,使用方法

压缩包打开后的几个文件

(1)单元体数据(Assy.xls),零部件数据(Part.xls),以及要计算的清单(List.xls),分别按表格格式要求,填好相关数据。(注:此数据格式为数据库原有格式,能用数据库的可直接复制数据。没有数据库的,填入关键数据信息即可,多余数据可以不管)

Assy.xls

Part.xls (除箭头所指数据外,其他可不填)

List.xls

(2)点击 零部件计算器7.0.exe 等等运行完毕。

(3)补充,只需要零部件数量,不需要尺寸的,可以删除Part.xls ,程序也可正常运行。  或者,在程序运行到最后询问时,按 N 键,取消零部件尺寸提取。

2,代码原理

利用最基本的CMD命令(判断与循环),将单元体数据(Assy.xls),零部件数据(Part.xls),以及要计算的清单(List.xls),分别存入单独的文件中,然后用CMD循环读取List.xls数据,再去一一对比Assy.xls中的数据,判断二者数据是否相同,如果相同,则提取相对应的数据,存到一个临时文件中,在对提取的数据进行分类汇总,最后输出到Count.xls中。

单元体零部件编号,通常只有3级,即单元体(0级),组装件(1级),零部件(2级),零部件中的零部件(3级)。因此可以只写3~4个循环即可。但为了代码简洁,以及后续需要,实际代码可以无限循环,直到找出最后一级为止,既可以无限循环套娃。

注:CMD实际只能读取文本文件,也就是说文件夹中的 .xls 文件实际是直接用 .txt 文件改后缀得到的,改成 .xls 文件是为了更方便对数据进行操作。

3,原代码分享

以下为CMD源代码,复制到.txt文件后,更改后缀为.cmd或.bat即可运行。(复制时,不能含代码序号)

@echo off
chcp 936 >nul
mode con cols=56 lines=18 &color 9f 
title 单元体零部件计算 
echo.
echo 单元体零部件计算  (作者:Duke.Cao) %Date:~0,4%-%Date:~5,2%-%Date:~8,2% %Time:~0,2%:%Time:~3,2% 
echo ------------------------------------------------------
echo.
echo 等候处理...
echo.

rem 参数设置--------------------------------------------------------------------------------------------

setlocal enabledelayedexpansion

set dd="C:\Users\%username%\tempduke"
set li=List.xls
set assy=Assy.xls
set part=Part.xls
set co=Count.xls
set num=0
set per=10
set sub=sub.xls

if exist %dd% (rd /s /q  %dd% & md %dd%) else (md %dd%)
attrib +h %dd%

if exist %li% (copy /y %li% %dd%\%li% >nul ) else (echo 缺少%li% 请核对! && goto :End  )  
if exist %assy% (copy /y %assy% %dd%\%assy% >nul ) else (echo 缺少%assy% 请核对! && goto :End  ) 
if exist %part% (copy %part% %dd%\%part%) >nul

cd /d %dd% >nul

if exist %co% (del %co% && cd. >  %co%) else (cd. > %co%)

echo "PART_NO"	"DESCRIPTION"	"DIM_A"	"DIM_B"	"PART_QTY"	"REMARKS" >> %co%

copy /y %co% tmp.xls >nul


rem  原始级----------------------------------------------------------------------

copy /y %li% t1 >nul
call :Subtotal

if exist t4 (ren t4 %sub%) else (goto :choice)

for /f "tokens=1,2 " %%a in (%sub%) do (
	echo %%a	"-"	"-"	"-"	%%b	"第 %num% 级" >> %co% )

rem  进度条-----------------------------------------------------------
set a=^set /p=■%b%^<nul^&ping/n 0 127.1^>nul^& 
set/p=  <nul&%a%%a%%a%%a%%a%%a%%a%%a%%a%%a% echo %per%%% 
echo. 

rem  循环 第N级----------------------------------------------------------------------

:loop
for /f "skip=1 tokens=1,2" %%a in (%sub%) do (
	for /f "skip=1 tokens=1,2,3" %%A in (%assy%) do (
		if %%a==%%A (
			set /a result=%%b*%%C && echo %%B	!result! >> t1
		)
	)
)

if exist t1 (call :Subtotal) else (goto :choice)

set /a num+=1
set sub=sub%num%.xls
ren t4 %sub%

for /f "tokens=1,2 " %%a in (%sub%) do (
	echo %%a	"-"	"-"	"-"	%%b	"第 %num% 级" >> %co% )

rem  进度条-----------------------------------------------------------
set /a per+=10
set a=^set /p=■%b%^<nul^&ping/n 0 127.1^>nul^& 
set/p=  <nul&%a%%a%%a%%a%%a%%a%%a%%a%%a%%a% echo %per%%%
echo. 
goto :loop


rem  分类汇总----------------------------------------------------------------------

:Subtotal
setlocal
for /f "tokens=1,2 delims=" %%a in (t1) do ( 
 set "a=%%a" 
 set "a=!a:-=.!"
 echo !a!	!b! >> t2 )

for /f "tokens=1,2" %%i in (t2) do set /a "#%%i#+=%%j"
for /f "tokens=1,2 delims=#=" %%i in ('set #') do echo %%i	%%j >> t3

for /f "tokens=1,2 delims=" %%a in ('type "t3"') do ( 
 set "a=%%a" 
 set "a=!a:.=-!"
 echo !a!	!b!>> t4 )
del t1 t2 t3
goto:eof

rem  循环结束判断是否提取尺寸----------------------------------------------------------------------

:choice
if not exist %part% (goto :BB) 
echo ----是否提取尺寸?(2秒后自动提取)
CHOICE /T 2 /C YN /D Y /M "----是请按Y,否请按N。"
if errorlevel 2 goto :BB
if errorlevel 1 goto :AA


rem  提取尺寸----------------------------------------------------------------------

:AA
for /f "skip=1 tokens=1,2,3,4,5,6 delims=	" %%a in (%co%) do (
	for /f "skip=1 tokens=1,2,3,4 delims=	" %%A in (%part%) do (
		if %%a==%%A (
			echo %%A	%%B	%%C	%%D	%%e	%%f >> tmp.xls
		)
	)
)
copy /y tmp.xls  "%~dp0\%co%"  >nul
goto :CC

:BB
copy /y %co%  "%~dp0\%co%" >nul

:CC
rem  进度条-----------------------------------------------------------
set a=^set /p=■%b%^<nul^&ping/n 0 127.1^>nul^& 
set/p=  <nul&%a%%a%%a%%a%%a%%a%%a%%a%%a%%a% echo 100%% 
echo.
echo 计算完成
cd /d "%~dp0"
start count.xls

:End
rd /s /q  %dd%
choice /t 2 /d y /n >nul
exit /b

4,文件分享

链接:https://pan.baidu.com/s/1C7DQitraWVXr0qFEtjNtRw

提取码:aodn

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值