Board logo

标题: [文件操作] 【已解决】批处理“打开文件”命令没有执行? [打印本页]

作者: cyb233    时间: 2019-2-12 16:37     标题: 【已解决】批处理“打开文件”命令没有执行?

本帖最后由 cyb233 于 2019-2-14 17:43 编辑

谁帮我看看这句话里“打开文件”命令为什么没有执行?
这句话提出来放进去都试过了,而且单独运行打开文件是正常的。
  1. If exist %USERPROFILE%\desktop\ABC.lnk (xcopy /y /c /h /r "%USERPROFILE%\desktop\ABC.lnk" "%~dp0" && del /q/f "%userprofile%\desktop\ABC.lnk" && start %~dp0ABC.lnk ) else ( echo 失败 )
复制代码

作者: Batcher    时间: 2019-2-12 19:16

  1. if exist "%USERPROFILE%\desktop\ABC.lnk" (
  2.     xcopy /y /c /h /r "%USERPROFILE%\desktop\ABC.lnk" "%~dp0"
  3.     del /q /f "%userprofile%\desktop\ABC.lnk"
  4.     start "" "%~dp0ABC.lnk"
  5. ) else (
  6.     echo 失败
  7. )
复制代码
代码保存为 C:\test.bat
打开一个CMD窗口,执行命令:
C:\test.bat

这样可以看到详细的报错信息或者线索
作者: cyb233    时间: 2019-2-12 22:44

回复 2# Batcher


    单独运行没有问题,但是合起来又不行了,我前面紧跟的是一个调用vbs创建快捷方式
  1. @echo off
  2. set "FileName=ABC.exe"
  3. echo 正在搜索,请稍后...
  4. for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  5.   if exist %%a:\ (
  6.     pushd %%a:\
  7.     for /r %%b in (*%FileName%) do (
  8.       if /i "%%~nxb" equ "%FileName%" (
  9.         echo,%%b
  10. set way=%%b
  11. goto :deal
  12.       )
  13.     )
  14.     popd
  15.   )
  16. )
  17. :deal
  18. @echo off
  19. ::设置程序或文件的完整路径(必选)
  20. set Program=%way%
  21. ::设置快捷方式名称(必选)
  22. set LnkName=ABC
  23. ::设置程序的工作路径,一般为程序主目录,此项若留空,脚本将自行分析路径
  24. set WorkDir=
  25. ::设置快捷方式显示的说明(可选)
  26. set Desc=steamcommunity_302.exe
  27. if not defined WorkDir call:GetWorkDir "%Program%"
  28. (echo Set WshShell=CreateObject("WScript.Shell"^)
  29. echo strDesKtop=WshShell.SpecialFolders("DesKtop"^)
  30. echo Set oShellLink=WshShell.CreateShortcut(strDesKtop^&"\%LnkName%.lnk"^)
  31. echo oShellLink.TargetPath="%Program%"
  32. echo oShellLink.WorkingDirectory="%WorkDir%"
  33. echo oShellLink.WindowStyle=1
  34. echo oShellLink.Description="%Desc%"
  35. echo oShellLink.Save)>makelnk.vbs
  36. echo 桌面快捷方式创建成功!
  37. makelnk.vbs
  38. del /f /q makelnk.vbs
  39. goto :open
  40. :none
  41. goto :eof
  42. :GetWorkDir
  43. set WorkDir=%~dp1
  44. set WorkDir=%WorkDir:~,-1%
  45. goto :eof
  46. :open
  47. if exist "%USERPROFILE%\desktop\ABC.lnk" (
  48.     xcopy /y /c /h /r "%USERPROFILE%\desktop\ABC.lnk" "%~dp0"
  49.     del /q /f "%userprofile%\desktop\ABC.lnk"
  50.     start "" "%~dp0ABC.lnk"
  51. ) else (
  52.     echo 失败
  53. )
复制代码

作者: Batcher    时间: 2019-2-12 23:02

回复 3# cyb233


37行改成这样试试:
cscript //nologo makelnk.vbs
作者: cyb233    时间: 2019-2-12 23:13

本帖最后由 cyb233 于 2019-2-12 23:36 编辑

回复 4# Batcher


    并没有成功,命令前有一句命令确定快捷方式是否存在是可以正常运行的,我尝试用goto直接返回这一命令却也是无法执行打开命令,但是整段取出却运行成功了。。。
作者: Batcher    时间: 2019-2-12 23:40

回复 5# cyb233


把 @echo off 删掉
代码保存为 C:\test.bat
打开一个CMD窗口,执行命令:
C:\test.bat

这样可以看到详细的报错信息或者线索
作者: cyb233    时间: 2019-2-12 23:58

本帖最后由 cyb233 于 2019-2-13 01:57 编辑

回复 6# Batcher


    emmm大部分情况就直接被跳过了,完全没有对应回显,多次运行只有一次提示“另一个程序正在使用此文件,进程无法访问。”

    我的整个批处理的结构是:
    1.前面其他命令                     正常
    2.判断是否存在快捷方式         正常
          存在→打开快捷方式→结束
       不存在→3.
    3.创建快捷方式                     正常
    4.判断存在然后打开快捷方式    未运行

    3.→goto→2.                               同样未运行
作者: Batcher    时间: 2019-2-13 08:49

回复 7# cyb233


把 @echo off 删掉
代码保存为 C:\test.bat
不要双击执行 C:\test.bat
打开一个CMD窗口,执行命令:
C:\test.bat

把CMD窗口里面显示的内容发出来我看一下

怎样把CMD窗口里的结果复制出来?
http://bbs.bathome.net/thread-3473-1-1.html
作者: cyb233    时间: 2019-2-13 09:37

回复 8# Batcher


    我完整运行了一遍:
Microsoft Windows [版本 10.0.16299.15]
(c) 2017 Microsoft Corporation。保留所有权利。

C:\Users\holypressure>D:\#Important重要\#CSDN更新!!!\hosts写入、端口占用\2未加入的功能\#测试用.bat

C:\Users\holypressure>TITLE hosts写入、端口占用

C:\Users\holypressure>color 17

C:\Users\holypressure>set choice=请输入命令并回车,从头开始按"r",退出按"q",重启系统按"s":

C:\Users\holypressure>echo.


C:\Users\holypressure>echo     欢迎使用hosts写入、端口占用
    欢迎使用hosts写入、端口占用

C:\Users\holypressure>echo.


C:\Users\holypressure>echo          如果执行失败请右键管理员打开
         如果执行失败请右键管理员打开

C:\Users\holypressure>echo.


C:\Users\holypressure>echo. ====== https://steamcn.com/t461062-1-1 ======
====== https://steamcn.com/t461062-1-1 ======

C:\Users\holypressure>echo. 命令1: 查看端口占用(非系统进程(PID=4)请使用任务管理器关闭或"taskkill /pid 对应PID -t -f")
命令1: 查看端口占用(非系统进程(PID=4)请使用任务管理器关闭或"taskkill /pid 对应PID -t -f")

C:\Users\holypressure>echo. 命令2:hosts写入问题及刷新DNS缓存(如果hosts写入失败有可能是安全软件自动阻止)
命令2:hosts写入问题及刷新DNS缓存(如果hosts写入失败有可能是安全软件自动阻止)

C:\Users\holypressure>echo. 命令3:VMware虚拟机服务的vmware-hostd.exe等自动启动和停止(443端口)
命令3:VMware虚拟机服务的vmware-hostd.exe等自动启动和停止(443端口)

C:\Users\holypressure>echo. 命令4: 解决端口被一些system服务占用
命令4: 解决端口被一些system服务占用

C:\Users\holypressure>echo. 命令5:查看本地网络配置
命令5:查看本地网络配置

C:\Users\holypressure>echo. 命令6:打开steam控制台/开发者模式
命令6:打开steam控制台/开发者模式

C:\Users\holypressure>echo. =============================================
=============================================

C:\Users\holypressure>echo 请输入命令并回车,从头开始按"r",退出按"q",重启系统按"s":
请输入命令并回车,从头开始按"r",退出按"q",重启系统按"s":

C:\Users\holypressure>echo.


C:\Users\holypressure>choice /c 12345rsq
[1,2,3,4,5,R,S,Q]?Q

C:\Users\holypressure>if 8 == 8 (goto :end )

C:\Users\holypressure>echo.


C:\Users\holypressure>echo.


C:\Users\holypressure>echo 是否打开steamcommunity_302.exe?
是否打开steamcommunity_302.exe?

C:\Users\holypressure>echo 请选择您的版本
请选择您的版本

C:\Users\holypressure>echo (1:V9.5  2:V9.4  3:V9.3  q:退出)
(1:V9.5  2:V9.4  3:V9.3  q:退出)

C:\Users\holypressure>echo.


C:\Users\holypressure>choice /c 123q
[1,2,3,Q]?1

C:\Users\holypressure>if 1 == 4 (goto :no )

C:\Users\holypressure>if 1 == 3 (goto :v9.3 )

C:\Users\holypressure>if 1 == 2 (goto :v9.4 )

C:\Users\holypressure>if 1 == 1 (goto :v9.5 )

C:\Users\holypressure>If exist "D:\#Important重要\#CSDN更新!!!\hosts写入、端口占用超级整合版\2未加入的功能\S_302_V9.5.lnk" (Start "" "D:\#Important重要\#CSDN更新!!!\hosts写入、端口占 用超级整合版\2未加入的功能\S_302_V9.5.lnk"   & goto no  )  else (Goto second )

C:\Users\holypressure>If exist "D:\#Important重要\#CSDN更新!!!\hosts写入、端口占用超级整合版\2未加入的功能\steamcommunity_302_V9.5.exe" (Start "D:\#Important重要\#CSDN更新!!!\hosts写 入、端口占用超级整合版\2未加入的功能\steamcommunity_302_V9.5.exe"   & goto no  )  else (Goto thrid )

C:\Users\holypressure>If exist "D:\#Important重要\#CSDN更新!!!\hosts写入、端口占用超级整合版\2未加入的功能\steamcommunity_302_V9.5.lnk" (Start "" "D:\#Important重要\#CSDN更新!!!\hosts写入、端口占用超级整合版\2未加入的功能\steamcommunity_302_V9.5.lnk"   & goto no  )  else (Goto forth )

C:\Users\holypressure>If exist "D:\#Important重要\#CSDN更新!!!\hosts写入、端口占用超级整合版\2未加入的功能\steamcommunity_302_V9.5.exe - 快捷方式.lnk" (Start "" "D:\#Important重要\#CSDN 更新!!!\hosts写入、端口占用超级整合版\2未加入的功能\steamcommunity_302_V9.5.exe - 快捷方式.lnk"   & goto no  )  else (echo 首次启动会创建快捷方式   & Goto find )
首次启动会创建快捷方式

C:\Users\holypressure>set "FileName=steamcommunity_302_V9.5.exe"

C:\Users\holypressure>echo 正在搜索,请稍后...
正在搜索,请稍后...

C:\Users\holypressure>for %a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (if exist %a:\ (
pushd %a:\
for /R %b in (*steamcommunity_302_V9.5.exe) do (if /I "%~nxb" EQU "steamcommunity_302_V9.5.exe" (
echo,%b
set way=%b
goto :deal
) )
popd
) )

C:\Users\holypressure>(if exist C:\ (
pushd C:\
for /R %b in (*steamcommunity_302_V9.5.exe) do (if /I "%~nxb" EQU "steamcommunity_302_V9.5.exe" (
echo,%b
set way=%b
goto :deal
) )
popd
) )

C:\>(if /I "steamcommunity_302_V9.5.exe" EQU "steamcommunity_302_V9.5.exe" (
echo,C:\Users\holypressure\Downloads\steamcommunity_302_V9.5\steamcommunity_302_V9.5.exe
set way=C:\Users\holypressure\Downloads\steamcommunity_302_V9.5\steamcommunity_302_V9.5.exe
goto :deal
) )
C:\Users\holypressure\Downloads\steamcommunity_302_V9.5\steamcommunity_302_V9.5.exe

C:\>set Program=C:\Users\holypressure\Downloads\steamcommunity_302_V9.5\steamcommunity_302_V9.5.exe

C:\>set LnkName=S_302_V9.5

C:\>set WorkDir=

C:\>set Desc=steamcommunity_302.exe

C:\>if not defined WorkDir call:GetWorkDir "C:\Users\holypressure\Downloads\steamcommunity_302_V9.5\steamcommunity_302_V9.5.exe"

C:\>set WorkDir=C:\Users\holypressure\Downloads\steamcommunity_302_V9.5\

C:\>set WorkDir=C:\Users\holypressure\Downloads\steamcommunity_302_V9.5

C:\>goto :eof

C:\>(
echo Set WshShell=CreateObject("WScript.Shell")
echo strDesKtop=WshShell.SpecialFolders("DesKtop")
echo Set oShellLink=WshShell.CreateShortcut(strDesKtop&"\S_302_V9.5.lnk")
echo oShellLink.TargetPath="C:\Users\holypressure\Downloads\steamcommunity_302_V9.5\steamcommunity_302_V9.5.exe"
echo oShellLink.WorkingDirectory="C:\Users\holypressure\Downloads\steamcommunity_302_V9.5"
echo oShellLink.WindowStyle=1
echo oShellLink.Description="steamcommunity_302.exe"
echo oShellLink.Save
) 1>makelnk.vbs

C:\>echo 桌面快捷方式创建成功!
桌面快捷方式创建成功!

C:\>cscript //nologo makelnk.vbs

C:\>del /f /q makelnk.vbs

C:\>goto pen

C:\>if exist "C:\Users\holypressure\desktop\S_302_V9.5.lnk" (
xcopy /y /c /h /r "C:\Users\holypressure\desktop\S_302_V9.5.lnk" "D:\#Important重要\#CSDN更新!!!\hosts写入、端口占用超级整合版\2未加入的功能\"
del /q /f "C:\Users\holypressure\desktop\S_302_V9.5.lnk"
start "" "D:\#Important重要\#CSDN更新!!!\hosts写入、端口占用超级整合版\2未加入的功能\S_302_V9.5.lnk"
)  else (echo 失败 )
C:\Users\holypressure\desktop\S_302_V9.5.lnk
复制了 1 个文件

C:\>goto :no

C:\>pause
请按任意键继续. . .
作者: Batcher    时间: 2019-2-13 13:53

回复 9# cyb233


D:\#Important重要\#CSDN更新!!!\hosts写入、端口占用超级整合版\2未加入的功能\
文件夹下有没有S_302_V9.5.lnk这个文件?直接双击这个lnk文件能打开吗?

start "" "D:\#Important重要\#CSDN更新!!!\hosts写入、端口占用超级整合版\2未加入的功能\S_302_V9.5.lnk"
单独执行这个命令能成功打开快捷方式是吗?
作者: cyb233    时间: 2019-2-13 15:26

本帖最后由 cyb233 于 2019-2-14 17:42 编辑

回复 10# Batcher


    在顺序执行复制后文件夹下有S_302_V9.5.lnk这个文件,直接双击这个lnk文件能打开。

start "" "D:\#Important重要\#CSDN更新!!!\hosts写入、端口占用超级整合版\2未加入的功能\S_302_V9.5.lnk"
单独执行这个命令能成功打开快捷方式。

这是完整的批处理
[attach]11796[/attach]
作者: cyb233    时间: 2019-2-14 01:15

回复 10# Batcher


    会不会是外部问题?我刚才弄了会虚拟机,现在创建快捷方式之后的打开正常了,创建之前前面又跳过打开命令了???
作者: cyb233    时间: 2019-2-14 17:42

回复 10# Batcher


    已解决,电脑问题(不过还是不清楚原因),虚拟机内运行完全正常。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2