无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 4575|回复: 22
打印 上一主题 下一主题

批处理执行的时候出了问题,怎么 修改?(已解决)

[复制链接]
跳转到指定楼层
1#
发表于 2021-6-9 00:02:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
2#
发表于 2021-6-9 00:56:17 | 只看该作者
本帖最后由 slore 于 2021-6-9 00:57 编辑

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

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

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

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


点评

感谢指导,我也一句句排查过了,最后发现可能是for语句和if之间存在某种矛盾。 因为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)之间要经历24个执行过程,不能因为C:\systembak.gho或者D:\system  详情 回复 发表于 2021-6-9 01:21
回复

使用道具 举报

3#
 楼主| 发表于 2021-6-9 01:21:04 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

4#
发表于 2021-6-9 01:40:13 | 只看该作者
bjay2008xmy 发表于 2021-6-9 01:21
感谢指导,我也一句句排查过了,最后发现可能是for语句和if之间存在某种矛盾。
因为for %%i in (C D E F ...

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

另外,for中 的else是没个盘符都执行不对,应该全部循环完毕判读是否找到。

点评

我在任意分区根目录下新建了一个空的systembak.gho文件,括号也重新更改了,执行结果如下。删掉else语句就正常了  详情 回复 发表于 2021-6-9 01:52
回复

使用道具 举报

5#
 楼主| 发表于 2021-6-9 01:52:21 来自手机 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

6#
 楼主| 发表于 2021-6-9 02:07:45 来自手机 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

7#
发表于 2021-6-9 06:53:48 来自手机 | 只看该作者
本帖最后由 nttwqz 于 2021-6-9 06:55 编辑

建议使用vscode做为代码编辑器,这样你就不会遇到括号、双引号自动补全、缩进等问题,中文符号也会直接提示,便于排查错误。

点评

确实很好用,感谢,之前一直用记事本写的  详情 回复 发表于 2021-6-9 16:01
回复

使用道具 举报

8#
发表于 2021-6-9 08:55:58 | 只看该作者
以下为测试用,如果没有问题请自行把相应执行语句的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
复制代码

点评

我先弄个空文件试试  详情 回复 发表于 2021-6-9 11:57
回复

使用道具 举报

9#
发表于 2021-6-9 09:24:02 | 只看该作者
检测硬盘,试试这个:
  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
复制代码
回复

使用道具 举报

10#
发表于 2021-6-9 09:32:49 | 只看该作者
仅作探讨,切勿做实际操作使用,产生一切后果与本人无责.
  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
复制代码

点评

这个执行不了  详情 回复 发表于 2021-6-9 12:13
回复

使用道具 举报

11#
发表于 2021-6-9 10:28:35 | 只看该作者
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循环,不然对应多系统的电脑而言,每次处理的都是最后一个系统所在的分区。。

点评

for 内跳出只能在里面 goto  发表于 2021-6-9 13:55
回复

使用道具 举报

12#
 楼主| 发表于 2021-6-9 11:57:00 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

13#
 楼主| 发表于 2021-6-9 12:13:48 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

14#
发表于 2021-6-9 13:17:11 来自手机 | 只看该作者
那可能是缺少wmic
回复

使用道具 举报

15#
 楼主| 发表于 2021-6-9 16:01:57 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

16#
 楼主| 发表于 2021-6-9 16:18:22 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-27 08:13

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表