【发布时间】:2018-08-28 01:51:49
【问题描述】:
我尝试编写一个批处理脚本,当您将另一个文件拖放到其中时,它会执行一些操作。如果你不放任何东西,只要双击它,它就会打开一个文件选择对话窗口。
对于第一部分,很简单:
@echo off
bin\dosomething "%~1"
对于第二部分,我搜索了这个帖子:https://stackoverflow.com/a/15885133/1683264
它也有效。
但是,我不能将这两者合二为一。我试过了
if "%~1" == [] goto select
然后在第二部分之前添加:select,它只是不起作用。代码如下:
@ECHO OFF
if "%~1" == [] goto select
bin\dosomething "%~1"
goto :EOF
:select
<# : chooser.bat
:: launches a File... Open sort of file chooser and outputs choice(s) to the console
:: https://stackoverflow.com/a/15885133/1683264
@echo off
setlocal
for /f "delims=" %%I in ('powershell -noprofile "iex (${%~f0} | out-string)"') do (
echo You chose %%~I
bin\dosomething "%%~I"
)
goto :EOF
: end Batch portion / begin PowerShell hybrid chimera #>
Add-Type -AssemblyName System.Windows.Forms
$f = new-object Windows.Forms.OpenFileDialog
$f.InitialDirectory = pwd
$f.Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*"
$f.ShowHelp = $true
$f.Multiselect = $true
[void]$f.ShowDialog()
if ($f.Multiselect) { $f.FileNames } else { $f.FileName }
我试了If "%~1"=="",按目的跳转了,但是对话窗口还是没有出现,CMD直接输出错误行为:
You chose + iex (${D:\Program Files (x86)\BBB\choose list file.bat} | out-strin ...
已解决
解决了。只有 "%~1" 可以正常工作。
我在这里粘贴代码:
<# : chooser.bat
:: drop file to execute, or open a file chooser dialog window to execute.
:: code mostly comes from https://stackoverflow.com/a/15885133/1683264
@ECHO OFF
if "%~1" == "" goto SELECT
bin\dosomething "%~1"
goto :EOF
:SELECT
setlocal
for /f "delims=" %%I in ('powershell -noprofile "iex (${%~f0} | out-string)"') do (
echo You chose %%~I
bin\dosomething "%%~I"
)
goto :EOF
: end Batch portion / begin PowerShell hybrid chimera #>
Add-Type -AssemblyName System.Windows.Forms
$f = new-object Windows.Forms.OpenFileDialog
$f.InitialDirectory = pwd
$f.Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*"
$f.ShowHelp = $true
$f.Multiselect = $true
[void]$f.ShowDialog()
if ($f.Multiselect) { $f.FileNames } else { $f.FileName }
【问题讨论】:
-
IF语法不正确。这是一个字符串比较。如果您在比较的一侧有引号,则必须在比较的另一侧有引号。删除括号并使用引号检查命令行参数是否为空。 -
我尝试了所有可能的方法,"%~1" == "", [%~1] == [], "%~1" == [], [%~1] == “”。前两个是对的。但它仍然不能作为目的。脚本直接输出一些行,而不是跳出对话窗口。
-
两个相等的符号。
-
你也不了解如何使用混合。您所有的批处理文件代码都需要在 powershell 脚本的 cmets 部分中。
-
哦,这就是为什么我不能用谷歌搜索符号 "
标签: windows batch-file cmd drag-and-drop filechooser