使用批处理文件列出文件,并允许用户选择要传递给可执行文件的文件

时间:2014-09-12 19:58:36

标签: windows batch-file batch-processing

我有一个批处理文件,它将显示文件夹中的所有文件,并允许用户按编号选择文件并将其传递给可执行文件。但是,一切正常,我试图使这个批处理文件成为一种即点即忘的类型。换句话说,我还希望用户能够选择一个将所有文件一次一个地传递给所述可执行文件的数字。我目前的代码如下:

@ECHO OFF
SET index=1

SETLOCAL ENABLEDELAYEDEXPANSION
FOR %%f IN (*.txt) DO (
   SET file!index!=%%f
   ECHO !index! - %%f
   SET /A index=!index!+1
)

SETLOCAL DISABLEDELAYEDEXPANSION

SET /P selection="select file by number:"

SET file%selection% >nul 2>&1

IF ERRORLEVEL 1 (
   ECHO invalid number selected   
   EXIT /B 1
)

CALL :RESOLVE %%file%selection%%%

CSCRIPT //NoLogo //B C:\FCLoader\sendkeys.vbs

Z:\executable.exe %file_name%


GOTO :EOF

:RESOLVE
SET file_name=%1
GOTO :EOF

CSCRIPT行用于传递vbs文件中的击键,以输入用户名,密码和数据库名称到可执行文件。这很好用。如果我只想对一个文件运行一次,那么可执行文件也可以正常工作。下面是运行后批处理内容的示例:

1 - file.txt
2 - file2.txt
3 - file3.txt
select file by number:

我希望它看起来像这样:

1 - file.txt
2 - file2.txt
3 - file3.txt
4 - All
select file by number:

我希望用户能够选择4 - All,并让它为每个文件运行可执行文件,一次一个。当第一次运行完成时,它将再次调用可执行文件等等......它还需要在运行可执行文件之前运行vbs脚本,以便如上所述传递凭据。

我已经在批处理文件中使用了我的知识范围,现在需要帮助。

1 个答案:

答案 0 :(得分:3)

试试这段代码:

@ECHO OFF
SET index=1
SETLOCAL ENABLEDELAYEDEXPANSION
FOR %%f IN (*.*) DO (
   SET file!index!=%%f
   ECHO !index! - %%f
   SET /A index=!index!+1
)
echo/!Index! - All
SETLOCAL DISABLEDELAYEDEXPANSION
SET /P selection="select file by number: "
if "%selection%" equ "%index%" goto allFiles
SET file%selection% >nul 2>&1
IF ERRORLEVEL 1 (
   ECHO invalid number selected   
   EXIT /B 1
)
CALL :RESOLVE %%file%selection%%%
CSCRIPT //NoLogo //B C:\FCLoader\sendkeys.vbs
Z:\executable.exe "%file_name%"
GOTO :EOF
:RESOLVE
SET file_name=%1
GOTO :EOF
:allFiles
FOR %%f IN (*.txt) DO (  
   CSCRIPT //NoLogo //B C:\FCLoader\sendkeys.vbs
   Z:\executable.exe "%%f"
)
goto :EOF