在可执行文件上模拟拖放文件?

Mimic dragging and dropping file over executable?

我在 Windows 中使用了一个名为“Levelator”的免费程序来规范化 WAV 文件中的音频,它不仅规范化了整个 WAV 文件 - 它使安静的声音变大,大声的声音变小,所以输出文件始终是相同的体积。如果有任何其他免费工具可以做到这一点(并且可以在命令行上做到这一点),我会使用它,但我从来没有发现任何其他东西可以做到这一点。

当此 Levelator 程序为 运行 时,它会打开一个 GUI。要处理 WAV 文件,只需将 WAV 文件拖到 GUI 上,它就会生成原始“.wav”文件的“.output.wav”版本。您还可以将 WAV 文件拖到 Levelator 的可执行文件上(没有 运行ning Levelator)并以这种方式获取输出文件。

您不能以任何方式在命令行上使用它!

我尝试过的任何东西都无法在批处理文件中运行,例如:

start /wait Levelator.exe myaudio.wav

或带引号:

start /wait Levelator.exe "myaudio.wav"

导致错误:“无法打开源文件:myaudio.wav”

此外,运行宁这什么也没带来:

Levelator.exe /?

这只会导致相同的错误:“无法打开源文件:/?”

我开始思考这个问题并想知道,如果您可以将 WAV 文件拖到可执行文件上,为什么不能在批处理文件中处理?如果上面的第一个命令不起作用,为什么不呢?为什么您被迫将 WAV 文件拖到 GUI 上或将 WAV 拖到可执行文件上?

奇怪的是程序无法通过在批处理文件中指定文件名在Levelator.exe后打开WAV文件。好像做不到。

这很令人沮丧,因为我总是必须在 GUI 上手动拖动 WAV 文件,但是使用批处理文件(并为任何 WAV 的名称创建一个变量)会容易得多。

由于这在批处理文件中不起作用,我如何在命令行上模拟拖放操作?这是唯一的方法。我通常会使用 AutoIt2 来做这种事情,但是无法猜测 WAV 文件在文件夹中的位置,所以也不能那样做,AutoIt2 不是那么先进,需要 window 坐标拖到某处。

我知道这是一项艰巨的任务,这就是我在这里问的原因:p

编辑:用户 14122392 的建议使其生效:)

我将以下内容放在 Levelator.exe 和 WAV 文件旁边的批处理文件中,希望它是通用的,因此不需要编辑,如果将 WAV 文件放在那里,它可以 运行 ...

For %%a IN ("*.wav") DO Set "WAVFILE=%%~na"
start /wait levelator.exe "%~dp0\%WAVFILE%.wav"

这允许具有任何文件名的 WAV 文件(不确定带有“!”字符的文件名,我知道 Levelator 不喜欢它们)并且通过使用“%~dp0”就足以欺骗它投入工作。

"C:\Folder\Levelator.exe" "C:\Folder\myaudio.wav"

当您拖动时,Windows 使用完整路径,因此两个文件都是准确指定的。启动一个程序的程序文件,程序就知道去哪里找源文件了。

另外 start 用于以不寻常的方式启动程序。输入 start /? 以获得有关使用 start 和正常启动程序的帮助。

除非你打开特殊模式,否则!不是CMD中的特殊字符。它从来都不是 MS-Dos 中的特殊字符,因此您需要告诉 CMD 将其视为一个字符。请参阅 setlocal /?set /?cmd /?