有阴也有阳 发表于 2018-7-7 20:25:31

求一个批处理

本帖最后由 有阴也有阳 于 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网友的热心帮助,谢谢!!!{:1_186:}

      附:最后完善的批处理:

      运行“理顺盘符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:55

@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:20

未测试,如果需要无限循环的话,末尾加

%0

有阴也有阳 发表于 2018-7-8 13:06:35

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:40

nttwqz 发表于 2018-7-7 20:51
@echo off
copy /y "%~dp0\x.exe" "%userprofile%\desktop\"
ping -n 3 127.1>nul


已经成功解决,详见本帖,感谢你的热心帮助!!!{:1_195:}

slore 发表于 2018-7-8 18:16:47

Microsoft Windows [版本 10.0.16299.431]
(c) 2017 Microsoft Corporation。保留所有权利。

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

START ["title"]
      
      
      

    "title"    在窗口标题栏中显示的标题。

kingshui 发表于 2018-8-24 21:38:17

用timeout命令可以不要pecmd
不过pecmd挺强大的,另外可以试下创建快捷方式或者移动文件的办法省下点点空间{:1_186:}

巨源不锈钢 发表于 2018-9-17 10:18:03

好复杂,学习学习

Dream漂移 发表于 2018-11-6 22:01:24


谢谢楼主分享技术资料!!很感兴趣!!

879792799 发表于 2018-11-15 20:45:59

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:21

无需理顺盘符64.exe
pecmd 自身即可理顺盘符

nttwqz 发表于 2018-11-15 21:11:03

>nul将执行正确的信息输出到空设备,即不显示ping命令指令正确结果
2>nul将错误的信息输出到空设备

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

ping -n 3 127.1>nul 静默延时3秒

879792799 发表于 2018-11-15 23:01:19

nttwqz 发表于 2018-11-15 21:11
>nul将执行正确的信息输出到空设备,即不显示ping命令指令正确结果
2>nul将错误的信息输出到空设备

...

谢谢大大 学习了!
页: [1]
查看完整版本: 求一个批处理