无忧启动论坛

标题: 批处理执行的时候出了问题,怎么 修改?(已解决) [打印本页]

作者: bjay2008xmy    时间: 2021-6-9 00:02
提示: 作者被禁止或删除 内容自动屏蔽
作者: slore    时间: 2021-6-9 00:56
本帖最后由 slore 于 2021-6-9 00:57 编辑

保持良好的编码习惯,if,() 补充缩进。

echo on 和 pause 是排错的好帮手。

最好使用可着色,代码块关联的代码编辑器。

注意符号使用英文字符,而不是汉字。



作者: bjay2008xmy    时间: 2021-6-9 01:21
提示: 作者被禁止或删除 内容自动屏蔽
作者: slore    时间: 2021-6-9 01:40
bjay2008xmy 发表于 2021-6-9 01:21
感谢指导,我也一句句排查过了,最后发现可能是for语句和if之间存在某种矛盾。
因为for %%i in (C D E F ...

执行不了是 最后一个括号是中文。

另外,for中 的else是没个盘符都执行不对,应该全部循环完毕判读是否找到。
作者: bjay2008xmy    时间: 2021-6-9 01:52
提示: 作者被禁止或删除 内容自动屏蔽
作者: bjay2008xmy    时间: 2021-6-9 02:07
提示: 作者被禁止或删除 内容自动屏蔽
作者: nttwqz    时间: 2021-6-9 06:53
本帖最后由 nttwqz 于 2021-6-9 06:55 编辑

建议使用vscode做为代码编辑器,这样你就不会遇到括号、双引号自动补全、缩进等问题,中文符号也会直接提示,便于排查错误。
作者: hilsonma    时间: 2021-6-9 08:55
以下为测试用,如果没有问题请自行把相应执行语句的echo和最后的pause去掉

  1. @echo off
  2. for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (if exist %%i:\windows\system32\cmd.exe set xtp=%%i)
  3. ECHO 系统盘为%xtp%

  4. for %%j in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (if exist %%j:\systembak.gho set bfp=%%j)
  5. if %bfp%a==a (
  6.     ECHO 未在各大分区根目录中找到系统映像SYSTEMBAK.GHO,请检查
  7.     ECHO 按任意键关机
  8.     pause>nul
  9.     echo wpeutil shutdown
  10. ) else (
  11.     ECHO 映像名:%bfp%:\systembak.gho
  12.     ECHO.
  13.     ECHO 接下来把%bfp%:\systembak.gho恢复到%xtp%
  14.     echo ghost64.exe -clone,mode=pload,src=%bfp%\systembak.gho:1,dst=%xtp% -sure
  15.     echo 恢复系统已完成,准备关机
  16.     echo wpeutil shutdown
  17. )
  18. pause
复制代码

作者: chishingchan    时间: 2021-6-9 09:24
检测硬盘,试试这个:
  1. set drive=.
  2. SETLOCAL ENABLEDELAYEDEXPANSION
  3. set Name=
  4. for /f "tokens=3" %%i in ('wmic logicaldisk where DriveType^=3 Get FileSystem^,FreeSpace^,Name^,Size^|findstr ":"') do set Name=%%i !Name!
  5. for %%i in (!Name!) do if exist "%%i\systembak.gho" set drive=%%i
  6. SETLOCAL DISABLEDELAYEDEXPANSION
复制代码

作者: 窄口牛    时间: 2021-6-9 09:32
仅作探讨,切勿做实际操作使用,产生一切后果与本人无责.
  1. @echo off
  2. for /f "Skip=1" %%a in ('Wmic Logicaldisk Get Name') do (
  3.         if exist "%%a\system.gho" set "gho=%%a\system.gho"
  4.         if exist "%%a\windows\system32\cmd.exe" set "pan=%%a"
  5. )
  6. echo %pan%
  7. echo ghost64.exe -clone,mode=pload,src=%gho%:1,dst=%pan:~,-1% -sure
  8. pause
复制代码

作者: foxfirefox    时间: 2021-6-9 10:28
for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (if exist %%i:\windows\system32\cmd.exe set xtp=%%i) 要增加找到 一个后跳出for循环,不然对应多系统的电脑而言,每次处理的都是最后一个系统所在的分区。。
作者: bjay2008xmy    时间: 2021-6-9 11:57
提示: 作者被禁止或删除 内容自动屏蔽
作者: bjay2008xmy    时间: 2021-6-9 12:13
提示: 作者被禁止或删除 内容自动屏蔽
作者: 窄口牛    时间: 2021-6-9 13:17
那可能是缺少wmic
作者: bjay2008xmy    时间: 2021-6-9 16:01
提示: 作者被禁止或删除 内容自动屏蔽
作者: bjay2008xmy    时间: 2021-6-9 16:18
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3