无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 3238|回复: 21
打印 上一主题 下一主题

excel合并多个单元格的内容用于批处理

[复制链接]
跳转到指定楼层
1#
发表于 2018-12-18 09:57:19 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 yjqd 于 2018-12-18 13:06 编辑

打开Excel
在A1-F1单元格输入下面的内容,C1单元格内容的开始和结尾处各留一空格

F1用函数CONCATENATE

                     A1                                          B1                   C1                             D1                                        F1
Dism /online /add-package /packagepath:       1.CAB       /NoRestart /quiet       /ScratchDir:D:\Tpr        =CONCATENATE(A1,B1, C1,D1)

回车后F1的内容为:Dism /online /add-package /packagepath:1.CAB  /NoRestart /quiet /ScratchDir:D:\Tpr
复制F1单元格的内容到记事本保存为bat文件

假如某个文件夹内有100个cab需要安装,dir /a-d /b获取cab文件名,把cab文件名粘贴在B1, 把A1 、C1 、D1、F1向下复制到100处
复制F1-F100单元格的内容到记事本保存为bat文件

如果被合并的单元格没有纯数字,F1可用函数PHONETIC
=PHONETIC(A1:D1)
这样选择单元格快一些

增加一列F1,输入echo.  光标定位到echo前面,按下alt+enter换行
                   A1                                          B1                   C1                             D1    F1                        G1     
Dism /online /add-package /packagepath:  1.CAB   /NoRestart /quiet  /ScratchDir:D:\Tpr    echo.     =CONCATENATE(A1,B1, C1,D1)

将G1内容复制到word:
“Dism /online /add-package /packagepath:1.CAB  /NoRestart /quiet /ScratchDir:D:\Tpr
echo.”

如果直接复制到记事本,echo.换不了行:
“Dism /online /add-package /packagepath:1.CAB  /NoRestart /quiet /ScratchDir:D:\Tprecho.

将引号替换掉,把它们复制到记事本保存为bat文件
Dism /online /add-package /packagepath:1.CAB  /NoRestart /quiet /ScratchDir:D:\Tpr
echo.
Dism /online /add-package /packagepath:2.CAB  /NoRestart /quiet /ScratchDir:D:\Tpr
echo.
Dism /online /add-package /packagepath:3.CAB  /NoRestart /quiet /ScratchDir:D:\Tpr
echo.
2#
 楼主| 发表于 2018-12-18 19:20:08 | 显示全部楼层
slore 发表于 2018-12-18 19:08
奇怪的思路,直接 for /f + dir /b 不行么?需要用Excel加工?

单纯bat可以实现

谢谢回复
1、顺便掌握Excel功能
2、自己对写嵌套的for命令有困难
----------------------------------------------
单纯Excel怎样实现取得文件名?

点评

你一个一个for就好了啊。 多个for可以用call把 循环变量传递到 标签函数,就不嵌套了。 Excel可以使用VBA,VB,VBS能做的事Excel就可以。。。 API或者简单的用FileSystemObject对象就行。  详情 回复 发表于 2018-12-18 21:24
回复

使用道具 举报

3#
 楼主| 发表于 2018-12-18 20:07:33 | 显示全部楼层
nttwqz 发表于 2018-12-18 20:03
楼主难道不知道 /packagepath 参数支持文件夹吗?!

谢谢回复

好像有的程序包要按顺序安装吧,你遇到过吗
如果不按顺序安装,/packagepath指向文件夹可能是最简单的了

点评

现在都是自动更新来着,筛选补丁这种事不做好多年了,反正装好了别个开自动更新也会又打上去的,何必多此一举,有多少使用者会在乎自己电脑安装了什么补丁,这些补丁是干什么的?!更何况,现在微软发布的都是累积更  详情 回复 发表于 2018-12-18 22:05
回复

使用道具 举报

4#
 楼主| 发表于 2018-12-19 06:46:25 | 显示全部楼层
slore 发表于 2018-12-18 21:24
你这个应该一个for就好了啊。 多个for可以用call把 循环变量传递到 标签函数,就不嵌套了。

Excel可 ...

谢谢提供的知识,学习了
回复

使用道具 举报

5#
 楼主| 发表于 2018-12-19 09:23:44 | 显示全部楼层
jiguo 发表于 2018-12-19 08:45
又是excel、又是word、又是记事本的,其实记事本+cmd就可以简单处理了:

1、运行输入cmd回车,打开命令 ...

dir 加参数/s可以获得绝对路径,便于替换
================================
当然,for循环处理更方便

点评

对于我等小白,你不完整贴出代码,光说for更简单,我们不懂,等于没说。  详情 回复 发表于 2018-12-19 09:36
回复

使用道具 举报

6#
 楼主| 发表于 2018-12-19 10:31:10 | 显示全部楼层
jiguo 发表于 2018-12-19 09:36
对于我等小白,你不完整贴出代码,光说for更简单,我们不懂,等于没说,也起不到啥帮助。

我写命令水平不行,slore、nttwqz 等水平高

for /f "delims=" %%a in ('dir /a-d /b') do (echo Dism /online /add-package /packagepath:%%a /NoRestart /quiet /ScratchDir:D:\Tpr)

点评

,对,你这个更方便,不用替换来替换去的: 生成批处理文件: 1、命令行窗口直接运行,两步生成批处理cab.bat: echo ^@Echo Off^&Pushd ^%~dp0>cab.bat for /f "delims=" %a in ('dir /a-d /b')  详情 回复 发表于 2018-12-19 11:23
回复

使用道具 举报

7#
 楼主| 发表于 2018-12-19 11:34:46 | 显示全部楼层
jiguo 发表于 2018-12-19 11:23
,对,你这个更方便,不用替换来替换去的:

方案1生成批处理文件:

如果批处理放在补丁文件夹内,自身名称也要被获取(虽说Dism不行执行bat文件),怎么办
我用的笨办法:
for /f "delims=" %%a in ('dir /a-d /b^|find /i /v "%~nx0"') do (echo Dism /online /add-package /packagepath:%%a /NoRestart /quiet /ScratchDir:D:\Tpr)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-4 14:24

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表