无忧启动论坛

标题: 求一个批处理 [打印本页]

作者: 有阴也有阳    时间: 2018-7-7 20:25
标题: 求一个批处理
本帖最后由 有阴也有阳 于 2018-7-9 19:58 编辑


        求一个批处理——在系统中运行,不是在PE中运行:

        自动复制与此批处理在同一文件夹的某一个程序到系统桌面,等待3秒后运行这个复制到系统桌面的程序。

        (设这个批处理所在的文件夹为Y文件夹,在Y文件夹里面的程序为X.exe。)


                                                                                                            谢谢!!!


        最后成功运行的批处理如下:

@echo off
copy "%~dp0\理顺盘符x64.exe" "%USERPROFILE%\desktop\理顺盘符x64.exe"
pecmd wait 3000
call "%USERPROFILE%\desktop\理顺盘符x64.exe"

        原来的运行命令是“start”,但却不能正常运行“理顺盘符x64.exe”,后来我忽然悟到“理顺盘符x64.exe”实际应该是一个bat程序,其运行命令应该用“call”,

一试果然成功。

        等待3秒的命令原来是:

        ping -n 3 127.1>nul

        后来考虑到这是刚一给电脑装完系统后理顺电脑系统的盘符用的,万一网卡驱动不合适,没装上,用这个命令延时3秒就行不通,故改用:

        pecmd wait 3000

        (实测成功延时了3秒——估计“理顺盘符x64.exe”里面有可能集成了“pecmd”。)

        这样即使网卡驱动没有装上也不影响延时3秒的执行。

        对了!“理顺盘符x64.exe”要求必须在C盘中运行,可它本来在我的G4D的启动U盘中放着的,所以才要复制到C盘——桌面,然后再运行,延时3秒,是因为复制

程序是要花时间的,防止程序还没有复制完,程序的运行命令却已经发出......

        最后感谢nttwqz网友的热心帮助,谢谢!!!

        附:最后完善的批处理:

        运行“理顺盘符x64.exe”.bat:

@echo off
copy "%~dp0\理顺盘符x64.exe" "%USERPROFILE%\desktop\理顺盘符x64.exe"
pecmd wait 3000
call "%USERPROFILE%\desktop\理顺盘符x64.exe"
pecmd wait 2000
start "" ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}
del /f /q "%USERPROFILE%"\desktop\理顺盘符x64.exe
exit

        程序流程:

        1.复制“理顺盘符x64.exe”到桌面。

        2.等待3秒。

        3.运行桌面的“理顺盘符x64.exe”。

        4.等待2秒。

        5.打开“计算机”窗口查看盘符整理的情况。

        6.删除复制到桌面的“理顺盘符x64.exe”程序。

        7.退出。

        实测的结果是一到“ 3.运行‘理顺盘符x64.exe’”整理盘符后,启动U盘的盘符只要一变,后面的:

        4.等待2秒。

        5.打开“计算机”窗口查看盘符整理的情况。

        6.删除复制到桌面的“理顺盘符x64.exe”程序。

        7.退出。

        就都不执行了,
本人水平业余爱好+小白,没办法,只好分成2个批处理来完成全部的功能:

        1.运行“理顺盘符x64.exe”.bat:

@echo off
copy "%~dp0\理顺盘符x64.exe" "%USERPROFILE%\desktop\理顺盘符x64.exe"
copy "%~dp0\64.bat" "%USERPROFILE%\desktop\64.bat"
pecmd wait 3000
call "%USERPROFILE%\desktop\64.bat"

        2.64.bat:

@echo off
call "%USERPROFILE%\desktop\理顺盘符x64.exe"
pecmd wait 2000
start "" ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}
del /f /q "%USERPROFILE%"\desktop\理顺盘符x64.exe
del /f /q "%USERPROFILE%"\desktop\64.bat
exit

        程序流程:

        a.复制“理顺盘符x64.exe”到桌面,复制“64.bat”到桌面。

        b.等待3秒。

        c.运行桌面的“64.bat”。

        d.运行桌面的“理顺盘符x64.exe”。

        e.等待2秒。

        f.打开“计算机”窗口查看盘符整理的情况。

        g.删除复制到桌面的“理顺盘符x64.exe”程序,删除复制到桌面的“64.bat”程序。

        h.退出。

        实测完美成功。

        后来在实践中发现,批处理在执行复制命令时,是在要复制的文件都已经复制完成后再开始执行下一条命令,所以在执行复制文件的命令的下

面再加一条等待3秒钟的命令就没有必要,故而予以取消:

        1.运行“理顺盘符x64.exe”.bat:

@echo off
copy "%~dp0\理顺盘符x64.exe" "%USERPROFILE%\desktop\理顺盘符x64.exe"
copy "%~dp0\64.bat" "%USERPROFILE%\desktop\64.bat"
call "%USERPROFILE%\desktop\64.bat"

        2.64.bat:

@echo off
call "%USERPROFILE%\desktop\理顺盘符x64.exe"
pecmd wait 2000
start "" ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}
del /f /q "%USERPROFILE%"\desktop\理顺盘符x64.exe
del /f /q "%USERPROFILE%"\desktop\64.bat
exit


作者: nttwqz    时间: 2018-7-7 20:51
@echo off
copy /y "%~dp0\x.exe" "%userprofile%\desktop\"
ping -n 3 127.1>nul
start "%userprofile%\desktop\x.exe"
作者: nttwqz    时间: 2018-7-7 20:55
未测试,如果需要无限循环的话,末尾加

%0
作者: 有阴也有阳    时间: 2018-7-8 13:06
nttwqz 发表于 2018-7-7 20:51
@echo off
copy /y "%~dp0\x.exe" "%userprofile%\desktop\"
ping -n 3 127.1>nul

        实际运行的批处理如下:

@echo off
copy "%~dp0\理顺盘符x64.exe" "%USERPROFILE%\desktop\理顺盘符x64.exe"
ping -n 3 127.1>nul
start "%USERPROFILE%\desktop\理顺盘符x64.exe"

        能正常复制“理顺盘符x64.exe”到桌面,也能正常地等待3秒钟,但就是不能运行“理顺盘符x64.exe”。

                                                                                  谢谢!!!

作者: 有阴也有阳    时间: 2018-7-8 13:43
nttwqz 发表于 2018-7-7 20:51
@echo off
copy /y "%~dp0\x.exe" "%userprofile%\desktop\"
ping -n 3 127.1>nul

已经成功解决,详见本帖,感谢你的热心帮助!!!
作者: slore    时间: 2018-7-8 18:16
Microsoft Windows [版本 10.0.16299.431]
(c) 2017 Microsoft Corporation。保留所有权利。

C:\Users\Slore>start /?
启动一个单独的窗口以运行指定的程序或命令。

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
      [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
      [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
      [command/program] [parameters]

    "title"    在窗口标题栏中显示的标题。
作者: kingshui    时间: 2018-8-24 21:38
用timeout命令可以不要pecmd
不过pecmd挺强大的,另外可以试下创建快捷方式或者移动文件的办法省下点点空间
作者: 巨源不锈钢    时间: 2018-9-17 10:18
好复杂,学习学习
作者: Dream漂移    时间: 2018-11-6 22:01

谢谢楼主分享技术资料!!很感兴趣!!
作者: 879792799    时间: 2018-11-15 20:45
nttwqz 发表于 2018-7-7 20:51
@echo off
copy /y "%~dp0\x.exe" "%userprofile%\desktop\"
ping -n 3 127.1>nul

大大批处理 127.1>nul这一条是什么意思????请指教
作者: vaf    时间: 2018-11-15 21:08
无需理顺盘符64.exe
pecmd 自身即可理顺盘符
作者: nttwqz    时间: 2018-11-15 21:11
>nul  将执行正确的信息输出到空设备,即不显示ping命令指令正确结果
2>nul  将错误的信息输出到空设备

>nul 2>nul 正确错误都不显示

ping -n 3 127.1>nul 静默延时3秒
作者: 879792799    时间: 2018-11-15 23:01
nttwqz 发表于 2018-11-15 21:11
>nul  将执行正确的信息输出到空设备,即不显示ping命令指令正确结果
2>nul  将错误的信息输出到空设备

...

谢谢大大 学习了!




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