批处理文件启动程序

时间:2016-02-13 12:55:53

标签: batch-file call autoit

M'kay,所以我之前写了几个批处理文件,所以我不是全新的,但这让我很难过。我要做的是从批处理文件中运行.exe文件。这是批处理脚本:

@echo off
:start
setlocal EnableDelayedExpansion
cd "C:\Users\Zac\Dropbox\SoundCloud"
set n=0
for %%f in (*.html*) do (
set /A n+=1
set "file[!n!]=%%f"
)
set /A "rand=(n*%random%)/32768+1"
move "!file[%rand%]!" C:\Users\Zac\Temp
start "~dp0Link_Open.exe"
echo %time%
timeout 70 > NUL
echo %time%
goto start

所以从我的理解,这会将一个随机的.html文件从一个目录移动到另一个目录,这很有效,我已经使用了很多,唯一的问题是“开始”命令,我不经常使用它。 “Link_Open.exe”与我的.bat在同一个文件夹中,但我已经尝试使用写入的完整目录运行它,我试过引用,没有引号,括号,没有括号,START,start,Start,调用,调用,调用,但没有一个工作,我总是得到相同的错误“无法找到Link_Open.exe,你有没有正确编写”

我可能想到的唯一原因就是为什么它不起作用,是.exe是用AutoIT编写然后编译的......但这不应该影响它吗?

运行批处理文件将导致移动随机文件,然后出现错误,然后重复。

我做错了什么?

Ps:运行Link_Open.exe会执行它应该执行的操作,因此没有错误,我唯一的问题是使用.bat打开它。

我仍然是Autoit的新手,但如果有人能给我看一个用Autoit移动随机.html文件的脚本,我可以将这两个脚本合并在一起吗?

2 个答案:

答案 0 :(得分:1)

如果您的bat文件和exe文件与您说的位于同一目录中,请尝试更改:

START Link_Open.exe

为:

start "%~dp0Link_Open.exe"
  • %~dp0扩展到当前批处理脚本的路径
  • start相当于START,无关紧要
  • 用引号括起来,以防你的路径有C:\My Documents之类的空格,从而将整个路径保持为一个参数,而不是被误解为由空格分隔的多个参数

错误说明

您的错误:Link_Open.exe cannot be found...正是这样,批处理无法找到Link_Open.exe。通常它会,因为当你只给出一个没有完全绝对路径的程序时,它会检查当前的工作目录。默认为批处理脚本的位置。但请注意,您实际上已使用以下行更改了当前工作目录:

cd "C:\Users\Zac\Dropbox\SoundCloud"

因此,除非你碰巧在SoundCloud目录中有Link_Open.exe,或者除非你有任何代码cd回到包含exe的批处理脚本的目录,或者除非你碰巧有{{} 1}}在Link_Open.exe中,没有理由批处理自动知道检查脚本运行的原始目录。

因此,我们尝试以批处理将如何找到它的方式引用%PATH%。一种方法是,如果我们执行绝对路径Link_Open.exe但是为了保持便携性,我建议将C:\path\to\Link_Open.exe扩展为%~dp0,这样批处理能够再次找到whatever path of the current batch script。 / p>

答案 1 :(得分:0)

  1. 您将目录更改为C:\ Users \ Zac \ Dropbox \ SoundCloud,然后尝试启动留在脚本目录中的Link_Open.exe。

  2. 所以下一步你使用~dp0变量从脚本中执行文件夹,但是错过了前导%:你必须写%~dp0

  3. 即使您要修复它,也许Link_Open.exe也依赖于当前的工作目录? start 允许设置CWD:start "window header" /D "%~dp0" "%~dp0Link_Open.exe"

  4. 要调试:在echo之前添加start,然后在下一行添加pause。将打印start命令,展开所有变量。你会看到是否有问题 - e。 G。您可以通过开始 - >进行复制和测试运行