[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 用WindowsAPI:CreateProcess创建进程执行批处理为何导致变量引用失效?

问题是这样的,今天我写了一个批处理文件,内容前面部分是这样的:
  1. @echo off
  2. echo %~1|findstr /I |E ".c .cpp">nul
复制代码
我直接使用批处理不会出问题,但是当我用CreateProcess创建进程时会提示:findstr不是可执行的命令或批处理文件。我想系统环境变量是不会改变的,我就郁闷了。但我还是试了下:
set "_findstr=%windir%\system32\findstr.exe" 。我以为可以了,结果还是错误。于是我就直接echo %_findstr% 结果发现%windir%是个空值,只有\system32\findstr.exe,我就搞不懂了。没办法了,我只能使用绝对路径, C:\windows\system32\findstr.exe 于是成功。但是前面为什么会是空值,还请高手指点!
关于那个CreateProcess,我是用创建管道 CreatePipe的方式把命令行的输出重定向到界面程序上面去。大致的过程就是这样了。还请各位大大不吝赐教!

回复 2# lxzzr
嗯,写错了,是/E  ,就是判断扩展名。

TOP

回复 3# CrLf

不是这个,你大概是没明白我的意思。谢谢。

TOP

回复 6# Demon
这个,虽说能运行,但和MSDN上面运行批处理方法的说法有出入。

TOP

回复 7# wc726842270
嗯,我又忘记看MSDN了。不过它说第一个参数必须有宿主进程,但我看也不是必须的。不过还是按照它的说法来作好了,这样应该不会有错。另外,我是把批处理和批处理参数全部写在第二个参数中的,这样就出现了我的问题。看了你说的贴子,不错,知道了原因。 CreateProcess 的第一个参数貌似确实不会主动去寻找路径,需要绝对路径。而第二个参数会。还有那个人说的运行cmd c:\a.bat 在我这里却运行得很好。win xp.

TOP

回复 6# Demon


另,我是把批处理和参数合在一起写到第二个参数,没有使用第一个参数。

TOP

返回列表