bat 脚本为什么总是打印出“系统找不到指定的驱动器。”?

查看 13|回复 1
作者:amiwrong123   
对 bat 脚本是一点不熟,在大模型的帮助下,写一个脚本。但是不知道为啥,总是会打印出来“系统找不到指定的驱动器。”。
这个脚本的目的就是,在一个相对目录里,复制一些 bin 文件到当前目录下,并显示他们的哈希值。用户先预定义好 bin 文件的名字,然后脚本提供选项让人选。
@echo off
setlocal enabledelayedexpansion
:: 定义文件数量和文件名
set count=2
set file1=type1.bin
set file2=type2.bin
set default_select=1
:PrintFiles
:: 打印文件信息
echo Available files:
for /l %%i in (1,1,%count%) do (
    set "filename=!file%%i!"
    echo %%i !filename!
)
:: 生成示例选择字符串
set example_selection=
for /l %%i in (1,1,%count%) do (
    set example_selection=!example_selection! %%i
)
:PromptUser
:: 提示用户选择文件
echo.
echo Please select the file numbers you want to copy (1-%count%).
echo For example:!example_selection! to select all files.
echo Press Enter to use the default selection: %default_select%.
set /p selection=Your selection [default: %default_select%]:
:: 检查用户是否直接按下了 Enter
if "%selection%"=="" (
    set selection=%default_select%
)
:: 初始化检查状态
set valid_selection=true
:: 验证用户输入的选择是否在范围内
for %%i in (%selection%) do (
    :: 去除选择中的引号,确保数字比较正确
    set "num=%%i"
    set num=!num:"=!
   
    if !num! lss 1 (
        echo Invalid selection: !num! is less than 1.
        set valid_selection=false
    ) else if !num! gtr %count% (
        echo Invalid selection: !num! exceeds %count%.
        set valid_selection=false
    )
)
:: 如果选择无效,重新提示用户输入
if "%valid_selection%"=="false" (
    echo Invalid selection. Please try again.
    goto :PromptUser
)
:: 执行复制操作
for %%i in (%selection%) do (
    :: 获取选择的文件
    set "file=!file%%i!"
    echo.
    echo %%i !file!
   
    :: 复制文件,从 new 目录复制到当前目录
    echo Copying !file! from new to current folder...
    copy "..\AI\!file!" ".\"
@REM certutil 的输出如下
@REM SHA1 的 type1.bin 哈希:
@REM def8bca03fab3781b90158550d40d377ab57e906
@REM CertUtil: -hashfile 命令成功完成。
@REM 所以下面这个循环要这么获取
    set line_count=0
    for /f "tokens=*" %%j in ('certutil -hashfile ".\!file!"') do (
        set /a line_count+=1
        ::echo Inner loop: %%i
        :: 当循环到第二行时,赋值给 md5
        if !line_count! equ 2 (
            set md5="%%j"
        )
    )
   
    :: 输出文件和 MD5 哈希值
    echo !file! md5 is !md5!
)
:end
echo Done!
pause
:: 结束
endlocal
CertUtil 的输出是三行,而这个奇怪的打印也是三行。感觉跟这个循环有关系。
另外,也注释了 @echo off 来看执行过程,看没看懂。

有会的大佬帮忙看看咋回事吧,感谢
PS:复制的功能和打印哈希的功能倒是实现了。。
llxvs   
code block 中不能使用双冒号注释,改用 rem 试试。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部