我正在开发一个使用doskey宏连接到CMD的程序。我希望使用for /f循环来设置这个宏,以便在AutoRun脚本文件中运行我的程序的输出。
我把问题中的代码打到了
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)
发布于 2019-08-11 16:20:45
问题是,FOR /F启动了一个新的cmd.exe实例,并且该实例也启动了您的自动运行脚本,这可能会导致一个没完没了的循环。
您无法避免脚本本身的启动,但是脚本可以检测它是由FOR /F调用还是直接调用。
如果cmdcmdline变量包含一个选项(搜索斜杠),我将检查它。
cmdcmdline变量的值应该始终复制,否则将使用表达式!cmdcmdline:/=!修改变量!
顺便说一句。管道也会启动一个新实例,但它不会启动自动运行脚本。
我用一个标题来完成这个任务。
@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"
)https://stackoverflow.com/questions/57450296
复制相似问题