无忧启动论坛

标题: excel合并多个单元格的内容用于批处理 [打印本页]

作者: yjqd    时间: 2018-12-18 09:57
标题: excel合并多个单元格的内容用于批处理
本帖最后由 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.
作者: maghreb    时间: 2018-12-18 11:11
很赞的思路
作者: 苏州本是    时间: 2018-12-18 11:24
方法巧妙!效率高!结构、内容类似的行越多,越显高效!
作者: 2012andyle113    时间: 2018-12-18 12:53
竟然还有这种操作
作者: 2010techon    时间: 2018-12-18 16:49
谢谢分享,PHONETIC函数居然可以这么用
作者: slore    时间: 2018-12-18 19:08
奇怪的思路,直接 for /f + dir /b 不行么?需要用Excel加工?

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

的事情,要bat处理=>Excel处理=>bat处理(复制,粘贴,拖动,复制,替换,保存) ...
作者: yjqd    时间: 2018-12-18 19:20
slore 发表于 2018-12-18 19:08
奇怪的思路,直接 for /f + dir /b 不行么?需要用Excel加工?

单纯bat可以实现

谢谢回复
1、顺便掌握Excel功能
2、自己对写嵌套的for命令有困难
----------------------------------------------
单纯Excel怎样实现取得文件名?
作者: nttwqz    时间: 2018-12-18 20:03
楼主难道不知道 /packagepath 参数支持文件夹吗?!
作者: yjqd    时间: 2018-12-18 20:07
nttwqz 发表于 2018-12-18 20:03
楼主难道不知道 /packagepath 参数支持文件夹吗?!

谢谢回复

好像有的程序包要按顺序安装吧,你遇到过吗
如果不按顺序安装,/packagepath指向文件夹可能是最简单的了
作者: slore    时间: 2018-12-18 21:24
yjqd 发表于 2018-12-18 19:20
谢谢回复
1、顺便掌握Excel功能
2、自己对写嵌套的for命令有困难


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

Excel可以使用VBA,VB,VBS能做的事Excel就可以。。。
API或者简单的用FileSystemObject对象就行。
作者: lbw2007    时间: 2018-12-18 21:39
看来大家慢慢都开始发现了,excel是写代码的神器。当年我用excel生成动态sql的时候我同事都看傻了。
代码丑了点,入不了大神的眼,但是逻辑极其简单,效率极高极高极高
作者: nttwqz    时间: 2018-12-18 22:05
yjqd 发表于 2018-12-18 20:07
谢谢回复

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

现在都是自动更新来着,筛选补丁这种事不做好多年了,反正装好了别个开自动更新也会又打上去的,何必多此一举,有多少使用者会在乎自己电脑安装了什么补丁,这些补丁是干什么的?!更何况,现在微软发布的都是累积更新补丁,你还能选择不成?特别是针对Win10以后的系统,半年发布一次镜像,现在网速又快,又都是累积,根本就没有集成的必要
作者: yjqd    时间: 2018-12-19 06:46
slore 发表于 2018-12-18 21:24
你这个应该一个for就好了啊。 多个for可以用call把 循环变量传递到 标签函数,就不嵌套了。

Excel可 ...

谢谢提供的知识,学习了
作者: 2012hzy6420    时间: 2018-12-19 07:56
谢谢分享
作者: jiguo    时间: 2018-12-19 08:45
本帖最后由 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


作者: jiguo    时间: 2018-12-19 09:01
本帖最后由 jiguo 于 2018-12-19 09:06 编辑


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

另外需要每行加一个“echo.”(也就是空一行的意思),在每行代码后面直接跟“&echo.”就可以了,效果一样,echo.代码无需独立一行。
作者: yjqd    时间: 2018-12-19 09:23
jiguo 发表于 2018-12-19 08:45
又是excel、又是word、又是记事本的,其实记事本+cmd就可以简单处理了:

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

dir 加参数/s可以获得绝对路径,便于替换
================================
当然,for循环处理更方便
作者: jiguo    时间: 2018-12-19 09:36
yjqd 发表于 2018-12-19 09:23
dir 加参数/s可以获得绝对路径,便于替换
================================
当然,for循环处理更方便


对于我等小白,你不完整贴出代码,光说for更简单,我们不懂,等于没说,也起不到啥帮助。
作者: yjqd    时间: 2018-12-19 10:31
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)
作者: jiguo    时间: 2018-12-19 11:23
本帖最后由 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)




作者: yjqd    时间: 2018-12-19 11:34
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)
作者: bjyuse    时间: 2018-12-20 13:46
el合并多个单元格的内容用于批处理 [修改]
作者: 2011matrixvexx    时间: 2024-10-18 22:22
感谢楼主分享




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3