批处理脚本、文件拖放、更改扩展名和重新加载文件
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
)
我有一个批处理脚本,它通过拖放接受 >=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
)