【问题标题】:Using a %username% in a variable not working在变量中使用 %username% 不起作用
【发布时间】:2015-11-25 23:54:22
【问题描述】:

我有一个批处理“Shell”,它加载包含一行代码的文件,然后执行该行。但是我在使用这行代码时遇到了问题:dir C:\Users\%username%\Desktop\WellOS2\Programdata 它查找 %username% 而不是我的用户名。当我将其更改为我的用户名时,我发现了这一点。

程序:

dir C:\Users\%username%\Desktop\WellOS2\Programdata

goto wellosnocls

GOWELL(程序生成器命令结束代码)

项目开启者:

:po

set lines=0

echo ----------------%command%------------------

:porep

set /a lines=%lines% + 1

set /p "code="<"C:\Users\%username%\Desktop\WellOS2\Programdata\%command%\%command%-%lines%".wellcode

%code%

goto porep

整个外壳:

@set /p build=<"C:\Users\%username%\Desktop\WellOS2\WellOS\Build".txt
@title WellOS V.%build%
goto boot
:register
cls
echo You are registering...
echo If this is an error press CTRL + C NOW...
pause
cls
set /p user= Enter your username: 
set /p passwordreg= Enter your password: 
mkdir "C:\Users\%username%\Desktop\WellOS2\Users\%user%"
mkdir "C:\Users\%username%\Desktop\WellOS2\Users\%user%\Documents"
echo %passwordreg% >"C:\Users\%username%\Desktop\WellOS2\Users\%user%\password".txt
echo 2 >"C:\Users\%username%\Desktop\WellOS2\OSfiles\bootset".txt
echo Your done.
pause
goto welloslog
:booterror
echo Sorry the boot file has an error. Check the user manual for BOOT$
pause
:boot
set /p boot=<"C:\Users\%username%\Desktop\WellOS2\OSfiles\bootset".txt
if %boot% == 1 goto register
if %boot% == 2 goto welloslog
goto booterror
cls
:ERROR
cls
echo ----------ERROR-------------------
echo %error%
pause
goto %back%
:welloslog
cls
echo Welcome to WellOS2!
echo ----------------LOGIN-------------
set /p user= Username: 
if exist "C:\Users\%username%\Desktop\WellOS2\Users\%user%" goto pass
set error= Sorry that account doesn't exist.
set back=welloslog
welloslogerror
:pass
set /p password=<"C:\Users\%username%\Desktop\WellOS2\Users\%user%\password".txt
set /p passwordlog= Password: 
if /i %passwordlog% == %password% goto wellos
set error= Sorry! wrong password.
set back= welloslog
goto error
:wellos
cls
:wellosnocls
echo --------------MAIN---------------
echo type help.sys for help
set /p command= #: 
if exist "C:\Users\%username%\Desktop\WellOS2\Programdata\%command%" goto po
set error= Unreconized program/command.
set back=wellos
goto error
:po
set lines=0
echo --------------%command%---------------
:porep
set /a lines=%lines% + 1
set /p "code="<"C:\Users\%username%\Desktop\WellOS2\Programdata\%command%\%command%-%lines%".wellcode
%code%
goto porep

【问题讨论】:

  • 没有看到整个代码(edit your question 包含它,请不要在评论中添加它),这只是一个猜测,但您通常只会看到这种行为当变量不存在时。由于%username% 是一个环境变量,它应该始终存在,除非您的代码中某处有set username= 语句。
  • @somethingdark 是操作系统代码还是程序代码?
  • 哪个包含给您带来麻烦的代码行。 (另外,我们中比较迂腐的人会指出,您不是在制作操作系统,而是在制作外壳。)
  • 我建议使用"%USERPROFILE%\Desktop\WellOS2\Programdata"。为什么要使用引号?用户名(帐户名)可以包含空格字符或其他需要双引号的字符。为什么使用环境变量USERPROFILE?如果用户帐户的配置文件目录不在驱动器 C 上,那么它也可以工作:对于所有或只是一些帐户,也适用于 Windows 2000/XP 和任何更高版本的独立于操作系统语言的 Windows。
  • @SomethingDark 已更新。

标签: batch-file path


【解决方案1】:

如果您使用set /p 运行代码并重定向输入&lt;,您将只执行输入文件的一行。在上面的示例“程序”中,只有 dir 命令会运行,其他 2 个语句永远不会运行。

如果您希望dir C:\Users\%username%\Desktop\WellOS2\Programdata 运行并且不给出错误“系统找不到指定的路径”。然后将其更改为cmd /c dir C:\Users\%username%\Desktop\WellOS2\Programdata。正如 cmets 中提到的,使用 %USERPROFILE% 而不是 c:\users\%username% 将使您的代码更加健壮。

【讨论】:

    猜你喜欢
    • 2015-09-01
    • 1970-01-01
    • 2014-05-18
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    相关资源
    最近更新 更多