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"
)