Racket can';t调用可执行文件并插入其输出流

Racket can';t调用可执行文件并插入其输出流,racket,Racket,我想从racket代码中调用mvn命令,然后继续关注这个过程,并在maven工作时返回它的输出,逐行将它呈现给用户 我尝试使用一个批处理文件来实现它,该批处理文件导航到我的maven项目并调用mvn命令(目前simple mvn clean将满足..) 我尝试使用系统和进程调用此批处理文件,但两者都返回相同的结果:mvn无法识别。(当然是这样,因为我可以自己调用这个批处理文件,而且它工作得非常好) 以及输出: 'mvn' is not recognized as an internal or e

我想从racket代码中调用mvn命令,然后继续关注这个过程,并在maven工作时返回它的输出,逐行将它呈现给用户

我尝试使用一个批处理文件来实现它,该批处理文件导航到我的maven项目并调用mvn命令(目前simple mvn clean将满足..)

我尝试使用系统和进程调用此批处理文件,但两者都返回相同的结果:mvn无法识别。(当然是这样,因为我可以自己调用这个批处理文件,而且它工作得非常好)

以及输出:

'mvn' is not recognized as an internal or external command,
operable program or batch file.
'("\r" 
  "C:\\Users\\aviad>cd\\\r" 
  "\r" 
  "C:\\>cd projects\\java\\projA\r"
  "\r" 
  "C:\\projects\\java\\projA>mvn clean \r")
当我从racket上下文调用它时,它似乎不熟悉path变量或其他什么(甚至可能不熟悉其他环境变量?)


有什么想法吗?

试着这样执行命令
SET
。IIRC这应该显示所有环境变量,包括路径。如果使用绝对路径,有什么区别吗?当我测试SET命令时,它是在重新启动我的机器之后(出于不同的原因),然后调用racket代码,它工作得很好(SET命令显示PATH变量包括我的mvn,程序运行良好)。我想知道为什么只有重新启动才能在从racket打开的shell中更新PATH变量。。。
(define invocation-method (lambda () (system "c:\\test.bat")))
;; capture output
(string-split (with-output-to-string invocation-method) "\n")
'mvn' is not recognized as an internal or external command,
operable program or batch file.
'("\r" 
  "C:\\Users\\aviad>cd\\\r" 
  "\r" 
  "C:\\>cd projects\\java\\projA\r"
  "\r" 
  "C:\\projects\\java\\projA>mvn clean \r")