wimboot 发表于 2017-3-19 16:40:40

for未执行do命令则执行后面的命令如何写

本帖最后由 wimboot 于 2017-3-20 11:00 编辑

for %%a in (x:\*.bat) do () || 命令
如何才能让前面for未发现bat文件执行后面 || 命令
主要作用是挂载wim文件(启动映像还是软件映像)后 判断下面配置文件就执行 否则打开资源管理器
(for %%a in ("Y:\*.ini" "Y:\*.cmd" "Y:\*.bat") do (if /i "%%~xa"==".ini" (pecmd.exe load "%%~a") else (pecmd.exe exec !"%%~a")))||explorer.exe "Y:"结果||之后都不执行
(for %%a in ("Y:\*.ini" "Y:\*.cmd" "Y:\*.bat") do (if /i "%%~xa"==".ini" (pecmd.exe load "%%~a") else (pecmd.exe exec !"%%~a")))&&explorer.exe "Y:" 结果&&之后都会执行

首先我必须承认自己眼高手低没有尝试各位热心人提供的好方法 以为for不能与&& ||联用 在大家指正下确实证明自己的错误 谢谢各位大师 受教了 最终得出正确命令:
(for /f %%a in ('dir /a:-d /b "Y:\*.ini";"Y:\*.cmd";"Y:\*.bat"') do (if /i "%%~xa"==".ini" (pecmd.exe load "Y:\%%~a") else (pecmd.exe exec !"Y:\%%~a")))||explorer.exe "Y:"

slore 发表于 2017-3-19 17:11:36

有点贪心吧,do中间加个变量flag就行了么。非要一行么。。。

wimboot 发表于 2017-3-19 17:16:26

slore 发表于 2017-3-19 17:11
有点贪心吧,do中间加个变量flag就行了么。非要一行么。。。

后面命令能否执行全靠之前for能否执行 for怎么执行返回都是0 我也是没办法 大师想想法子

freesoft00 发表于 2017-3-19 17:36:20

按slore 说的,加一个变量不行?
set "www="
for /f %%a in ('dir x:\*.bat') do set "www=%%a"
if "%www%"=="" echo ok

或者下面的行不行?
for /f%%a in ('dir x:\*.bat') do if not defined %%a (echo,ok)

wimboot 发表于 2017-3-19 17:47:59

本帖最后由 wimboot 于 2017-3-19 17:49 编辑

in (x:\*.bat) 会获取具体文件名 如果没有获取到就不会执行do() 但会执行下个命令

wimboot 发表于 2017-3-19 17:57:30

for获取多种格式的文件后要执行的 否则执行后面命令

wimboot 发表于 2017-3-19 18:37:38

本帖最后由 wimboot 于 2017-3-19 18:39 编辑

frg521 发表于 2017-3-19 18:24
大概写法本身就是错误的.
%%a 如果不存在,批处理是不会运行后面的任何代码,所以判断*.bat放在这里本身就...

主要作用是挂载wim文件(启动映像还是软件映像)后 判断下面配置文件就执行 否则打开资源管理器
for %%a in ("Y:\*.ini" "Y:\*.cmd" "Y:\*.bat") do (if /i "%%~xa"==".ini" (pecmd.exe load "%%~a") else (pecmd.exe exec !"%%~a"))||explorer.exe "Y:"结果||之后都不执行
for %%a in ("Y:\*.ini" "Y:\*.cmd" "Y:\*.bat") do (if /i "%%~xa"==".ini" (pecmd.exe load "%%~a") else (pecmd.exe exec !"%%~a"))&&explorer.exe "Y:" 结果&&之后都会执行

pseudo 发表于 2017-3-19 18:50:18

2>nul >nul dir /a /b x:\*.bat || 命令
2>nul >nul dir /a /b x:\*.bat && for %%a in (x:\*.bat) do ()

wimboot 发表于 2017-3-19 18:54:26

本帖最后由 wimboot 于 2017-3-19 19:26 编辑

(for %%a in ("Y:\*.ini" "Y:\*.cmd" "Y:\*.bat") do (if /i "%%~xa"==".ini" (pecmd.exe load "%%~a"&exit) else (pecmd.exe exec !"%%~a"&exit)))&explorer.exe "Y:" 暂时这解决吧 &exit 执行一个配置文件后退出

junyee 发表于 2017-3-19 19:35:31

(for /f %i in ('dir X:\*.bat') do echo a ) || echo ...

wimboot 发表于 2017-3-19 20:31:49

junyee 发表于 2017-3-19 19:35
(for /f %i in ('dir X:\*.bat') do echo a ) || echo ...

主要是for命令返回值都是0:即成功 &&都会被执行 ||都不会执行

junyee 发表于 2017-3-20 09:12:23


质疑别人的帮助之前,你自己动手试过了吗?



wimboot 发表于 2017-3-20 09:51:13

junyee 发表于 2017-3-20 09:12
质疑别人的帮助之前,你自己动手试过了吗?

哦 谢谢了

wimboot 发表于 2017-3-20 10:44:58

首先我必须承认自己眼高手低没有尝试各位热心人提供的好方法 以为for不能与&& ||联用 在大家指正情况下确实证明自己的错误 受教了 最终得出正确命令:(for /f %%a in ('dir /a:-d /b "Y:\*.ini";"Y:\*.cmd";"Y:\*.bat"') do (if /i "%%~xa"==".ini" (pecmd.exe load "Y:\%%~a") else (pecmd.exe exec !"Y:\%%~a")))||explorer.exe "Y:"
页: [1]
查看完整版本: for未执行do命令则执行后面的命令如何写