模仿通过可执行文件拖放文件?

问题描述

我在Windows中使用一个名为“ Levelator”的免费程序对WAV文件中的音频进行规范化,它不仅仅对整个WAV文件进行规范化-它使安静的声音变得越来越响亮,因此输出文件都一样整个量。如果有其他免费工具可以执行此操作(并且可以在命令行上执行),那么我会使用它,但是我再也找不到其他可以执行此操作的工具。

运行此Levelator程序时,它将打开一个GUI。要处理WAV文件,只需将WAV文件拖到GUI上,它会吐出原始“ .wav”文件的“ .output.wav”版本。您也可以将WAV文件拖动到Levelator的可执行文件上(不运行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的功能还不够先进,需要窗口坐标将某物拖到某处。

我知道这是一个很高的要求,这就是为什么我在这里问它:p

编辑:user14122392的建议导致其起作用:)

我将以下内容放在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 /?