批处理脚本、文件拖放、更改扩展名和重新加载文件

Batch script, file drag&drop, change extension and reload file

我有一个批处理脚本,它通过拖放接受 >=1 个文件。完整路径保存在一个数组中,然后作为输入提供给另一个程序。文件名+扩展名保存在另一个数组中,然后显示给用户。

我正在尝试检查文件扩展名,如果它不是 .bin,则自动将我拖放的文件重命名为 .bin 并重新加载它以将其添加到两个数组中。我怎样才能做到这一点?我尝试了一些 if 命令或 %%~xi 但通常它无法正确检测它是否为 .bin,当然路径不会在数组中更新。

@echo off
pushd %~dp0
setlocal enabledelayedexpansion
set /a Count = 0

:START
  set file="%~1"
  if %file%=="" goto RUN
  for %%i in (%file%) do set name=%%~nxi
  set /a Count += 1
  set [FilePath.!Count!]=%file%
  set [FileName.!Count!]=%name%
  shift
goto START

:RUN
for /l %%i in (1, 1, %Count%) do (
   program.exe -command "![FilePath.%%i]!"
   echo.
   echo File Name: ![FileName.%%i]!
   echo.
   pause
   cls
   if exist file.log del file.log
)

您可以在数组填充期间重命名它。您的脚本还有一些其他潜在的问题(例如 pushd 到未加引号的目录,delayedexpansion 在您不需要它的地方可能会破坏包含感叹号的文件名,以及 if %file%=="" 应该引用 "%file%")。而且真的没有理由维护一个文件名数组或循环两次。您的脚本比需要的复杂得多。

@echo off
setlocal

pushd "%~dp0"

for %%I in (%*) do (
    if /I not "%%~xI"==".bin" move "%%~fI" "%%~dpnI.bin" >NUL
    program.exe -command "%%~dpnI.bin"
    echo;
    echo File Name: "%%~nxI"
    echo;

    rem If you want to rename the file back the way it was after running
    rem program.exe on it, uncomment the following line:
    rem if /I not "%%~xI"==".bin" move "%%~dpnI.bin" "%%~fI" >NUL

    pause
    cls
    if exist file.log del file.log
)