对 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:复制的功能和打印哈希的功能倒是实现了。。
1
llxvs 40 天前 via iPhone
code block 中不能使用双冒号注释,改用 rem 试试。
|
2
amiwrong123 OP @llxvs #1
Available files: 1 type1.bin 2 type2.bin Please select the file numbers you want to copy (1-2). For example: 1 2 to select all files. Press Enter to use the default selection: 1. Your selection [default: 1]: 1 2 1 type1.bin Copying type1.bin from new to current folder... 已复制 1 个文件。 type1.bin md5 is "def8bca03fab3781b90158550d40d377ab57e906" 2 type2.bin Copying type2.bin from new to current folder... 已复制 1 个文件。 type2.bin md5 is "2137abf34c69627d936177dbd5d80e6540bc3cfd" Done 请按任意键继续. . . 按你说的。我干脆把 最后那个双层循环里的 注释都删掉了,然后居然好了,神奇 |
3
amiwrong123 OP @llxvs #1
所以,这全是 注释的锅了呗? |
4
llxvs 40 天前 via iPhone
@amiwrong123 是的,双冒号开头的注释不能用在括号中
|
5
amiwrong123 OP |
6
llxvs 40 天前 via iPhone
@amiwrong123 在某些条件下会出问题
|