首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMD AutoRun挂

CMD AutoRun挂
EN

Stack Overflow用户
提问于 2019-08-11 13:22:52
回答 1查看 339关注 0票数 3

我正在开发一个使用doskey宏连接到CMD的程序。我希望使用for /f循环来设置这个宏,以便在AutoRun脚本文件中运行我的程序的输出。

我把问题中的代码打到了

代码语言:javascript
复制
FOR /f "delims=" %%i in ('echo echo hi') do %%i

该命令在直接将其输入CMD窗口时工作。当将它放入文件并使用CALL script.cmd运行它时,它也能工作。

但是,当我使用注册表键"Computer\HKEY_CURRENT_USER\Software\Microsoft\Command Processor" AutoRun自动加载该文件时,CMD在启动时挂起( HDD在此过程中大量闪烁)。在这种情况下按CTRL+C时,会将^s和Cs的负载写入CMD窗口(屏幕上充满了它们),并混合了一些The process tried to write to a nonexistent pipe.

我怀疑Windows Defender病毒扫描仪,但禁用它并没有太大的改变。

我能做什么?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-11 16:20:45

问题是,FOR /F启动了一个新的cmd.exe实例,并且该实例也启动了您的自动运行脚本,这可能会导致一个没完没了的循环。

您无法避免脚本本身的启动,但是脚本可以检测它是由FOR /F调用还是直接调用。

如果cmdcmdline变量包含一个选项(搜索斜杠),我将检查它。

cmdcmdline变量的值应该始终复制,否则将使用表达式!cmdcmdline:/=!修改变量!

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

我用一个标题来完成这个任务。

代码语言:javascript
复制
@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"
)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57450296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档