批处理文件启动程序



M'kay,所以我之前写过一些批处理文件,所以我对它们并不完全陌生,但这让我感到困惑。我正在尝试做的是从批处理文件运行.exe文件。下面是批处理脚本:

@echo off
:start
setlocal EnableDelayedExpansion
cd "C:UsersZacDropboxSoundCloud"
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:UsersZacTemp
start "~dp0Link_Open.exe"
echo %time%
timeout 70 > NUL
echo %time%
goto start

所以据我了解,这会将随机.html文件从一个目录移动到另一个目录,这有效,我已经用了很多,唯一的问题是"开始"命令,我不经常使用它。 "Link_Open.exe"与我的.bat位于同一文件夹中,但我尝试使用写入的完整目录运行它, 我尝试了引号,没有引号,括号,没有括号,开始,开始,开始,呼叫,但它们都不起作用,我总是收到相同的错误"Link_Open.exe找不到,你写正确吗">

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

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

我做错了什么?

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

我对 Autoit 还很陌生,但如果有人可以给我看一个脚本来使用 Autoit 移动随机.html文件,我可以将两个脚本组合在一起,不是吗?

如果您的 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:UsersZacDropboxSoundCloud"

因此,除非您碰巧在该 SoundCloud 目录中有Link_Open.exe,或者除非您有任何代码要cd回包含 exe 的批处理脚本的目录,或者除非您碰巧在 %PATH%Link_Open.exe,否则 batch 没有理由自动知道检查运行脚本的原始目录。

因此,我们尝试以批处理知道如何找到它的方式引用Link_Open.exe。一种方法是,如果我们做了绝对路径C:pathtoLink_Open.exe但是为了保持可移植性,我建议%~dp0扩展到whatever path of the current batch script,因此批处理能够再次找到Link_open.exe

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

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

  3. 即使你会修复它,也许Link_Open.exe也取决于当前的工作目录?启动允许设置 CWD: start "window header" /D "%~dp0" "%~dp0Link_Open.exe"

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

最新更新