从批处理脚本调用时可执行文件被暂停

从批处理脚本调用时可执行文件被暂停

我有一组在 Windows 7 和 Windows 10 下运行的批处理文件,虽然它们在前者中运行良好,但在后者中却遇到了问题。
基本上,当批处理在 Windows 10 下运行时,批处理调用的其中一个 exe 文件被暂停并且永远不会返回。
这在 Windows 10 下系统性地发生,我可以看到进程被暂停,任务管理器向我显示了这一点。

由于这是在批处理文件中,我尝试在外部直接在进程中使用相同的参数进行相同的调用cmd.exe。但在这种情况下,exe 并未暂停!

我真的不明白为什么 Windows 10 会暂停我的进程,也不明白为什么它只在批处理文件中调用时才会这样做。

你们中有人能提供任何线索/提示来说明是什么原因造成的吗?
有什么建议告诉我应该如何找出罪魁祸首吗?

答案1

在与同事测试了各种方法后,我们发现如果批处理及其处理的文件放在“短”位置内,则 exe 不会被暂停。例如,它在里面工作,c:\folder但在里面不工作c:\users\obones\Documents\folder

这导致我发现了一种解决方法,即通过改变for调用挂起的 exe 的循环的编写方式。最初,我有这样的:

for %%l in (%COMMON_SOURCE_POS% ignore.po) do call :RemoveIgnored %%l

其中COMMON_SOURCE_POS是一串(相当长的)空格分隔的引号文件名列表,其中大多数是绝对文件名,即具有完整路径的文件名。例如"c:\folder\common\subfolder\..\..\someotherfolder\somename.po"

现在,代码如下:

set COMMON_SOURCE_POS_FILENAME=common_source_pos.txt
echo.> %COMMON_SOURCE_POS_FILENAME%
for %%p in (%COMMON_SOURCE_POS%) do if /I %%~np neq %TARGET% echo %%p>> %COMMON_SOURCE_POS_FILENAME%
echo ignore.po>> %COMMON_SOURCE_POS_FILENAME%

for /F "delims=;" %%l in (%COMMON_SOURCE_POS_FILENAME%) do call :RemoveIgnored %%l
del %COMMON_SOURCE_POS_FILENAME%

这样,子部分调用的 exe:RemoveIgnored就不会再被 Windows 10 暂停。

我不确定这为什么有帮助,但显然这与命令使用的变量的长度有关for

相关内容