Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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
Windows 启用延迟扩展不起作用_Windows_Batch File_Windows 10_Command Prompt - Fatal编程技术网

Windows 启用延迟扩展不起作用

Windows 启用延迟扩展不起作用,windows,batch-file,windows-10,command-prompt,Windows,Batch File,Windows 10,Command Prompt,我的批处理程序中出现了一个奇怪的错误。我认为问题在于启用延迟扩展,但我应用的修复程序不起作用。这是我的代码: setlocal ENABLEDELAYEDEXPANSION for /l %%x in (1, 1, 3) do ( set ff=Firefox_45_0.0_%%x echo %%x firefox.exe -CreateProfile "%ff% %homedrive%%homepath%\Desktop\Firefoxes\Profiles\Firefox

我的批处理程序中出现了一个奇怪的错误。我认为问题在于启用延迟扩展,但我应用的修复程序不起作用。这是我的代码:

setlocal ENABLEDELAYEDEXPANSION

for /l %%x in (1, 1, 3) do (
   set ff=Firefox_45_0.0_%%x
   echo %%x
   firefox.exe -CreateProfile "%ff% %homedrive%%homepath%\Desktop\Firefoxes\Profiles\Firefox_45_0.0_%%x"


)
ff没有任何值,尽管我使用了延迟扩展。解决办法是什么

编辑:打印到控制台的命令我不使用@echo off

   C:\Users\Home2\Desktop\Firefoxes\Versions\Firefox_45_0.0>(
set ff=Firefox_45_0.0_1
 echo 1
 firefox.exe -CreateProfile "!ff! C:\Users\Home2\Desktop\Firefoxes\Profiles\Firefox_45_0.0_1"
    )
有趣的是,虽然它打印出来了,但它的性能却和预期的一样!ff!在控制台中

!ff!修复了它,因为延迟扩展使用感叹号而不是百分号。 延迟扩展模式不会改变扩展百分比,它添加了一种新的更好的扩展方式

默认情况下禁用延迟扩展。 要在批处理文件中启用它,请使用

setlocal EnableDelayedExpansion
set "var=Hello world"
echo !var!
注意: 在命令行上,setlocal EnableDelayedExpansion命令完全无效。 您可以通过在

上使用cmd/v:on启动一个新的cmd.exe实例来启用它!ff!修复了它,因为延迟扩展使用感叹号而不是百分号。 延迟扩展模式不会改变扩展百分比,它添加了一种新的更好的扩展方式

默认情况下禁用延迟扩展。 要在批处理文件中启用它,请使用

setlocal EnableDelayedExpansion
set "var=Hello world"
echo !var!
注意: 在命令行上,setlocal EnableDelayedExpansion命令完全无效。
您可以通过在命令行中使用cmd/v:on启动新的cmd.exe实例来启用它

SETLOCAL EnableDelayedExpansion
SETLOCAL EnableExtensions
下面的代码用于回答问题,没有延迟扩展:

for /l %x in (1, 1, 3) do (
   rem set ff=Firefox_45_0.0_%x
   echo Firefox_45_0.0_%x
   firefox.exe -CreateProfile "Firefox_45_0.0_%x %homedrive%%homepath%\Desktop\Firefoxes\Profiles\Firefox_45_0.0_%x"
)
Win 10 CMD不允许在命令行上更改SETLOCAL。批处理文件的“确定”:

默认情况下不启用延迟环境变量扩展。你 可以为应用程序启用或禁用延迟环境变量扩展 使用/V:ON或/V:OFF开关特定调用CMD.EXE。你 可以为计算机上的所有CMD.EXE调用启用或禁用延迟扩展 计算机和/或用户登录会话,方法是设置 使用REGEDIT.EXE在注册表中输入以下REG_DWORD值:

到0x1或0x0。特定于用户的设置优先于 机器的设置。命令行开关优先于 注册表设置

在批处理文件中,设置本地ENABLEDELAYEDEXPANSION或DISABLEDELAYEDEXPANSION 参数优先于/V:ON或/V:OFF开关。参见SETLOCAL/? 详情请参阅

如果启用了延迟环境变量扩展,则感叹号 字符可用于替换环境变量的值 在执行时


从命令行,延迟的扩展在我测试的Win10上不起作用

SETLOCAL EnableDelayedExpansion
SETLOCAL EnableExtensions
下面的代码用于回答问题,没有延迟扩展:

for /l %x in (1, 1, 3) do (
   rem set ff=Firefox_45_0.0_%x
   echo Firefox_45_0.0_%x
   firefox.exe -CreateProfile "Firefox_45_0.0_%x %homedrive%%homepath%\Desktop\Firefoxes\Profiles\Firefox_45_0.0_%x"
)
Win 10 CMD不允许在命令行上更改SETLOCAL。批处理文件的“确定”:

默认情况下不启用延迟环境变量扩展。你 可以为应用程序启用或禁用延迟环境变量扩展 使用/V:ON或/V:OFF开关特定调用CMD.EXE。你 可以为计算机上的所有CMD.EXE调用启用或禁用延迟扩展 计算机和/或用户登录会话,方法是设置 使用REGEDIT.EXE在注册表中输入以下REG_DWORD值:

到0x1或0x0。特定于用户的设置优先于 机器的设置。命令行开关优先于 注册表设置

在批处理文件中,设置本地ENABLEDELAYEDEXPANSION或DISABLEDELAYEDEXPANSION 参数优先于/V:ON或/V:OFF开关。参见SETLOCAL/? 详情请参阅

如果启用了延迟环境变量扩展,则感叹号 字符可用于替换环境变量的值 在执行时


您只启用延迟扩展,但不使用它。延迟变量引用为!瓦尔!而不是%var%。使用您的代码,只需将%ff%替换为!ff!对我来说很好。如果它显示!ff!实际上,这应该是一个提示,您没有设置本地enabledelayedexpansion。检查您当前的代码。虽然它会打印,但它实际上会按预期执行!ff!在控制台中。是的,我承认这让人困惑。陷入黑暗:命令重复尚未运行,因此延迟扩展尚未发生。解析行时发生命令回音,因此延迟扩展尚未发生;延迟扩展发生在运行时之后;这就是为什么!ff!是印刷品;引用不会改变任何事情,因为引用处理也是在解析时完成的…大量的实验。。。下面这篇非常有用的帖子:您只启用延迟扩展,但不使用它。延迟变量引用为!瓦尔!而不是%var%。使用您的代码,只需将%ff%替换为!ff!对我来说很好。如果它显示!ff!实际上,这应该是一个提示,您没有设置本地enabledelayedexpansion。检查您当前的代码。虽然它会打印,但它实际上会按预期执行!ff!在t
他安慰我。是的,我承认这让人困惑。陷入黑暗:命令重复尚未运行,因此延迟扩展尚未发生。解析行时发生命令回音,因此延迟扩展尚未发生;延迟扩展发生在运行时之后;这就是为什么!ff!是印刷品;引用不会改变任何事情,因为引用处理也是在解析时完成的…大量的实验。。。下面这篇非常有用的帖子:使用!ff!只是指纹!ff!。是因为我的命令使用引号吗?我在Win 10上,使用SETLOCAL EnableDelayedExpansion我也得到了!ff!而不是扩展的值。使用!ff!只是指纹!ff!。是因为我的命令使用引号吗?我在Win 10上,使用SETLOCAL EnableDelayedExpansion我也得到了!ff!DelayedExpansion也适用于Win 10,但您尝试在命令行中使用它。在这里,您无法使用SETLOCAL EnableDelayedExpansion仅使用cmd/v:on启用它。这对于Win10来说并不特殊,至少是WinXP之后的行为。通常情况下,您不希望使用注册表项更改默认的延迟扩展模式,否则您会从许多批处理文件中获得未经验证的行为,希望它在startI时被禁用。在XP和8.1 Dell笔记本电脑上,Ti能够在命令行上进行更改。在地面上,Pro Win 10无法在命令行上工作/v switch®istry hack可以工作。我想,它已经在您的XP和8.1系统上启用了,或者尝试使用SETLOCAL DisableDelayedExpansion禁用它,该扩展应该会失败。我不认为它是默认启用的。我记得在设置变量之前通过setlocal启用!!在命令行上。从现在起,我在Win 10上进行了升级,并默认使用注册表,因此不必每次都启用。DelayedExpansion也可以在Win 10上运行,但您尝试在命令行上使用它。在这里,您无法使用SETLOCAL EnableDelayedExpansion仅使用cmd/v:on启用它。这对于Win10来说并不特殊,至少是WinXP之后的行为。通常情况下,您不希望使用注册表项更改默认的延迟扩展模式,否则您会从许多批处理文件中获得未经验证的行为,希望它在startI时被禁用。在XP和8.1 Dell笔记本电脑上,Ti能够在命令行上进行更改。在地面上,Pro Win 10无法在命令行上工作/v switch®istry hack可以工作。我想,它已经在您的XP和8.1系统上启用了,或者尝试使用SETLOCAL DisableDelayedExpansion禁用它,该扩展应该会失败。我不认为它是默认启用的。我记得在设置变量之前通过setlocal启用!!在命令行上。从那以后,我在Win10上升级了,并且默认使用注册表,所以不必每次都启用。