Batch file 基于变量的当前值创建文本文件时,将创建一个文本文件,其内容与该变量的上一个值相同

Batch file 基于变量的当前值创建文本文件时,将创建一个文本文件,其内容与该变量的上一个值相同,batch-file,Batch File,代码如下: @echo off if not exist c:\Locker ( cd/ md Locker cd windows\system32 echo Set the password for your locker:- set /p pass= echo %pass%>text.txt ) else ( echo Folder is created ) 这里,假设I set pass=12345,文本文件不包含任何这样的

代码如下:

@echo off 
if not exist c:\Locker (
    cd/
    md Locker
    cd windows\system32
    echo Set the password for your locker:-
    set /p pass=
    echo %pass%>text.txt
) else (
    echo Folder is created
)
这里,假设I set pass=12345,文本文件不包含任何这样的值 如果再次运行程序并设置pass=abcde,则文本文件将显示该值 名称为“1234”。 请告诉我背后的原因,以及如何避免这种情况??
提前感谢………

您需要设置本地启用延迟扩展,因为您正在使用:


您需要使用SETLOCAL ENABLEDELAYEDEXPANSION,因为您正在使用:


/p
在您的
集合中应该做什么?@zshooter
/p
提示输入。您希望发生什么?你将12345作为密码传递,它会将其写入文本文件,然后你给它abcde,它会覆盖旧密码,有什么问题吗?不,当我传递12345时,它不会写入文件,但如果我写abcde,它会写入12345,同样,现在如果我尝试写入qwerty,那么文件中写入的值是abcde。
/p
在您的
集合中应该做什么?@zshooter
/p
提示输入。您希望发生什么?你通过12345作为密码,它将其写入文本文件,然后你给它abcde,它会覆盖旧的密码,有什么问题吗?不,当我通过12345时,它不会写入文件,但如果我写abcde,那么它会写入12345,类似地,现在如果我尝试写入qwerty,那么文件中写入的值就是abcde。你的代码工作得很好,但似乎自从我执行了你的代码后,我的机器就停止了输入,即set/p pass=不再在任何批处理文件中工作。那么它和“SETLOCAL ENABLEDELAYEDEXPANSION”或其他任何东西有什么关系吗……没有。Setlocal不影响设置/p
。但是如果您的批处理不是以管理员身份运行,您将无法在system32目录中创建文件。是的,我是以管理员身份运行的。。。。。。。但当我重新打开CMD时,一切都很好。。。。。。。。。。。。谢谢,我为你创建了一个小应用程序b'coz:)你的代码运行得很好,但似乎自从我执行了你的代码后,我的机器已经停止接收输入,即set/p pass=在任何批处理文件中都不再工作了。那么它和“SETLOCAL ENABLEDELAYEDEXPANSION”或其他任何东西有什么关系吗……没有。Setlocal不影响设置/p
。但是如果您的批处理不是以管理员身份运行,您将无法在system32目录中创建文件。是的,我是以管理员身份运行的。。。。。。。但当我重新打开CMD时,一切都很好。。。。。。。。。。。。谢谢,我已经为你创建了一个小应用程序:)
@echo off 
SETLOCAL ENABLEDELAYEDEXPANSION
if not exist c:\Locker (
    cd/
    md Locker
    cd windows\system32
    echo Set the password for your locker:-
    set /p pass=
    echo !pass!>text.txt
) else (
    echo Folder is created
)
ENDLOCAL