Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file CMD自动运行挂起_Batch File_Cmd - Fatal编程技术网

Batch file CMD自动运行挂起

Batch file CMD自动运行挂起,batch-file,cmd,Batch File,Cmd,我正在使用doskey宏编写一个钩住CMD的程序。我想使用for/f循环设置该宏,以在自动运行脚本文件中运行程序的输出 我把有问题的代码归结为 FOR /f "delims=" %%i in ('echo echo hi') do %%i 直接在CMD窗口中键入命令时,该命令起作用。当将它放入文件并使用CALL script.cmd运行它时,它也可以工作 但是,当我使用注册表项“Computer\HKEY\U CURRENT\U USER\Software\Microsoft\Command

我正在使用
doskey
宏编写一个钩住CMD的程序。我想使用
for/f
循环设置该宏,以在自动运行脚本文件中运行程序的输出

我把有问题的代码归结为

FOR /f "delims=" %%i in ('echo echo hi') do %%i
直接在CMD窗口中键入命令时,该命令起作用。当将它放入文件并使用
CALL script.cmd
运行它时,它也可以工作

但是,当我使用注册表项“Computer\HKEY\U CURRENT\U USER\Software\Microsoft\Command Processor”自动运行时,CMD在启动时挂起(HDD LED在此过程中剧烈闪烁)。在这种情况下按CTRL+C时,
^
s和
C
s的负载被写入CMD窗口(屏幕上满是这些负载),一些
进程试图写入不存在的管道。
混合在一起

我怀疑是Windows Defender病毒扫描程序,但禁用它并没有多大改变

我能做什么


我在Windows10上。(版本1803,OS build 17134.885)

问题是,
FOR/F
启动了一个新的cmd.exe安装,该实例也启动了自动运行脚本,这可能会导致无休止的循环

您无法避免脚本本身的开始,但脚本可以检测它是由
FOR/F
调用的还是直接调用的。
我检查
cmdline
变量是否包含选项(搜索斜杠)。
应始终复制
cmdline
变量的值,否则将使用表达式
修改变量!cmdline://=

顺便说一句,管道也会启动一个新实例,但不会启动自动运行脚本

我正在为此任务使用标题

@echo off
setlocal EnableDelayedExpansion
set "cmd=!cmdcmdline!"

if "!cmd!" == "!cmd:/=!" (
  REM *** Stuff for AutoRun 
  REM *** Loading doskey macros
  doskey /macrofile=myMacros.txt
  REM *** Changing the directory
  endlocal
  cd c:\temp

  REM *** Setting variables
  SET "PRJ=C:\myProjects"
)