【问题标题】:Mimic dragging and dropping file over executable?在可执行文件上模拟拖放文件?
【发布时间】:2020-12-07 02:46:49
【问题描述】:

我在 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 文件。这似乎是不可能的。

这很令人沮丧,因为我总是不得不手动将 WAV 文件拖到 GUI 上,但是使用批处理文件(并为任何 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”足以使其正常工作.

【问题讨论】:

  • 除了你的编辑最好放在答案部分之外,代码是不安全的,因为你首先指向for循环中的当前工作目录,然后指向脚本,可能不同;你最好只使用这个:for %%A in ("%~dp0*.wav") do start "" /WAIT levelator.exe "%%~fA"(当你想使用当前目录时删除%~dp0部分;start "" /WAIT甚至可能没有必要)...

标签: file batch-file command line drag


【解决方案1】:
"C:\Folder\Levelator.exe" "C:\Folder\myaudio.wav"

当您拖动时,Windows 使用完整路径,因此两个文件都被精确指定。用于启动程序的程序文件,然后程序确切地知道在哪里寻找源文件。

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

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

【讨论】:

  • 您的建议解决了它!我原始帖子的底部有一个 EDIT 显示什么有效,干杯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-15
  • 2015-11-10
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多