无忧启动论坛

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

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

[复制链接]
发表于 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.
 楼主| 发表于 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
回复

使用道具 举报

发表于 2018-12-18 11:11:48 | 显示全部楼层
很赞的思路
回复

使用道具 举报

发表于 2018-12-18 11:24:47 | 显示全部楼层
方法巧妙!效率高!结构、内容类似的行越多,越显高效!
回复

使用道具 举报

发表于 2018-12-18 12:53:07 | 显示全部楼层
竟然还有这种操作
回复

使用道具 举报

发表于 2018-12-18 16:49:09 | 显示全部楼层
谢谢分享,PHONETIC函数居然可以这么用
回复

使用道具 举报

发表于 2018-12-18 19:08:47 | 显示全部楼层
奇怪的思路,直接 for /f + dir /b 不行么?需要用Excel加工?

单纯bat可以实现
单纯Excel可以实现

的事情,要bat处理=>Excel处理=>bat处理(复制,粘贴,拖动,复制,替换,保存) ...

点评

谢谢回复 1、顺便掌握Excel功能 2、自己对写嵌套的for命令有困难 ---------------------------------------------- 单纯Excel怎样实现取得文件名?  详情 回复 发表于 2018-12-18 19:20
回复

使用道具 举报

 楼主| 发表于 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
回复

使用道具 举报

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

点评

谢谢回复 好像有的程序包要按顺序安装吧,你遇到过吗 如果不按顺序安装,/packagepath指向文件夹可能是最简单的了  详情 回复 发表于 2018-12-18 20:07
回复

使用道具 举报

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

谢谢回复

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

点评

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

使用道具 举报

发表于 2018-12-18 21:24:16 | 显示全部楼层
yjqd 发表于 2018-12-18 19:20
谢谢回复
1、顺便掌握Excel功能
2、自己对写嵌套的for命令有困难


你这个应该一个for就好了啊。 多个for可以用call把 循环变量传递到 标签函数,就不嵌套了。

Excel可以使用VBA,VB,VBS能做的事Excel就可以。。。
API或者简单的用FileSystemObject对象就行。

点评

谢谢提供的知识,学习了  详情 回复 发表于 2018-12-19 06:46

评分

参与人数 1无忧币 +5 收起 理由
yjqd + 5 学习了

查看全部评分

回复

使用道具 举报

发表于 2018-12-18 21:39:13 | 显示全部楼层
看来大家慢慢都开始发现了,excel是写代码的神器。当年我用excel生成动态sql的时候我同事都看傻了。
代码丑了点,入不了大神的眼,但是逻辑极其简单,效率极高极高极高
回复

使用道具 举报

发表于 2018-12-18 22:05:38 | 显示全部楼层
yjqd 发表于 2018-12-18 20:07
谢谢回复

好像有的程序包要按顺序安装吧,你遇到过吗

现在都是自动更新来着,筛选补丁这种事不做好多年了,反正装好了别个开自动更新也会又打上去的,何必多此一举,有多少使用者会在乎自己电脑安装了什么补丁,这些补丁是干什么的?!更何况,现在微软发布的都是累积更新补丁,你还能选择不成?特别是针对Win10以后的系统,半年发布一次镜像,现在网速又快,又都是累积,根本就没有集成的必要

评分

参与人数 1无忧币 +5 收起 理由
yjqd + 5 学习了

查看全部评分

回复

使用道具 举报

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

Excel可 ...

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

使用道具 举报

发表于 2018-12-19 07:56:59 | 显示全部楼层
谢谢分享
回复

使用道具 举报

发表于 2018-12-19 08:45:29 | 显示全部楼层
本帖最后由 jiguo 于 2018-12-19 09:11 编辑

又是excel、又是word、又是记事本的,其实记事本+cmd就可以简单处理了:

1、运行输入cmd回车,打开命令提示符窗口,定位到cab包所在目录,输入:dir /a-d /b /s >cab.txt 并回车;
2、在cab目录会生成一个cab.txt文件,用记事本打开,内容形式如下:

D:\Esd\windows10.0-kb4469342-x64.cab
D:\Esd\windows10.0-kb4469344-x64.cab
D:\Esd\Windows10.0-KB4469348-x64.cab
D:\Esd\windows10.0-kb4470788-x64.cab

3、记事本中点编辑,替换:把“D:\Esd\”,替换成:“Dism /online /add-package /packagepath:”,点全部替换,搞定前半截;
4、继续替换:把“.CAB”,替换成:“.CAB  /NoRestart /quiet /ScratchDir:D:\Tpr”,点全部替换,搞定后半截;
5、最后在txt文件最前面一行添加“@Echo Off&Pushd %~dp0“,并回车,保存文件,改cab.txt文件为cab.bat,搞定。

完稿后cab.bat文件结构形式如下:

@Echo Off&Pushd %~dp0
Dism /online /add-package /packagepath:windows10.0-kb4469342-x64.CAB  /NoRestart /quiet /ScratchDir:D:\Tpr
Dism /online /add-package /packagepath:windows10.0-kb4469344-x64.CAB  /NoRestart /quiet /ScratchDir:D:\Tpr
Dism /online /add-package /packagepath:windows10.0-kb4469348-x64.CAB  /NoRestart /quiet /ScratchDir:D:\Tpr
Dism /online /add-package /packagepath:windows10.0-kb4470788-x64.CAB  /NoRestart /quiet /ScratchDir:D:\Tpr

点评

dir 加参数/s可以获得绝对路径,便于替换 ================================ 当然,for循环处理更方便  详情 回复 发表于 2018-12-19 09:23

评分

参与人数 1无忧币 +5 收起 理由
yjqd + 5 学习了

查看全部评分

回复

使用道具 举报

发表于 2018-12-19 09:01:22 | 显示全部楼层
本帖最后由 jiguo 于 2018-12-19 09:06 编辑


记事本用Notedat2替换,编辑代码更方便。

另外需要每行加一个“echo.”(也就是空一行的意思),在每行代码后面直接跟“&echo.”就可以了,效果一样,echo.代码无需独立一行。
回复

使用道具 举报

 楼主| 发表于 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
回复

使用道具 举报

发表于 2018-12-19 09:36:55 | 显示全部楼层
yjqd 发表于 2018-12-19 09:23
dir 加参数/s可以获得绝对路径,便于替换
================================
当然,for循环处理更方便


对于我等小白,你不完整贴出代码,光说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)  详情 回复 发表于 2018-12-19 10:31
回复

使用道具 举报

发表于 2018-12-19 11:23:44 | 显示全部楼层
本帖最后由 jiguo 于 2018-12-19 11:26 编辑
yjqd 发表于 2018-12-19 10:31
我写命令水平不行,slore、nttwqz 等水平高

for /f "delims=" %%a in ('dir /a-d /b') do (echo Dism  ...



,对,你这个更方便,不用替换来替换去的:

方案1生成批处理文件:
命令行窗口直接运行,两步生成批处理cab.bat:
1、echo ^@Echo Off^&Pushd ^%~dp0>cab.bat
2、for /f "delims=" %a in ('dir /a-d /b') do (echo Dism /online /add-package /packagepath:%a /NoRestart /quiet /ScratchDir:D:\Tpr>>cab.bat)

或 用批处理运行生成cab.bat(批处理中需多个%):
@Echo Off&Pushd %~dp0
@echo ^@Echo Off^&Pushd ^%%~dp0>cab.bat
for /f "delims=" %%a in ('dir /a-d /b') do (echo Dism /online /add-package /packagepath:%%a /NoRestart /quiet /ScratchDir:D:\Tpr>>cab.bat)


方案2不生产成批处理,直接命令行窗口运行补丁整合:
for /f "delims=" %a in ('dir /a-d /b') do (Dism /online /add-package /packagepath:%a /NoRestart /quiet /ScratchDir:D:\Tpr)



点评

如果批处理放在补丁文件夹内,自身名称也要被获取(虽说Dism不行执行bat文件),怎么办 我用的笨办法: for /f "delims=" %%a in ('dir /a-d /b^|find /i /v "%~nx0"') do (echo Dism /online /add-package /packa  详情 回复 发表于 2018-12-19 11:34
回复

使用道具 举报

 楼主| 发表于 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)
回复

使用道具 举报

发表于 2018-12-20 13:46:21 | 显示全部楼层
el合并多个单元格的内容用于批处理 [修改]
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-29 20:25

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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