【问题标题】:Create a .txt file using BATCH使用 BATCH 创建一个 .txt 文件
【发布时间】:2015-12-30 14:48:15
【问题描述】:

我正在尝试创建一个允许您输入用户名和密码的程序,然后创建一个与输入的用户名同名的文件夹,然后在包含密码的文件夹中创建一个 .txt 文件。出于某种原因,我创建 .txt 文件的代码似乎不起作用。该文件不包含密码,而是完全为空。有没有人可以解决我的问题?

这是我的代码:

    set /p newun=New Username: 
    set /p newpw=New Password: 

    if not exist C:\ProgramData\---\%newun% (
        mkdir C:\ProgramData\---\%newun%
        %newpw% > C:\ProgramData\---\%newun%\%newun%pw.txt
    ) else (
        echo %newun%'s directory already exists.
        pause
        goto start
    )

【问题讨论】:

  • 脚本在执行该行代码时应该会抛出错误,因为密码不是它可以执行的命令的名称。

标签: batch-file cmd


【解决方案1】:

您忘记添加echo。您的批次需要如下所示:

(echo !newpw!)> C:\ProgramData\---\%newun%\%newun%pw.txt

除此之外,您还需要添加...

setlocal EnableDelayedExpansion

...在批次的顶部。

这和 ( / ) 周围的 echo 和保存密码的变量很重要,因为您的密码可能包含否则会搞砸其他事情的字符(请参阅@dbenham 的评论)。如果有人在他的密码中输入了><& 和多个其他字符,否则会破坏您的脚本,因为如果这成为批处理的一部分,其行为将会改变。

由您决定是否需要以类似方式对待newun

您当前的批处理尝试使用您的密码名称调用一个程序,并获取该程序的输出(无)并将其写入文件。

你可以试试这个看看效果:

doesnotexistforsure > output.txt
dir output.txt

执行此操作您将收到“找不到命令”消息和一个空文件。这与您的批次中发生的事情相同。

【讨论】:

  • 重定向>前面的空格会被写入文件。在读回密码时可能会出现问题(我认为这就是该文件的用途)。更好的语法:>Output.txt echo mypassword
  • @Stephan 你的意思是echo %newpw%> output.txt ?因为其他空间无关紧要,我认为它更具可读性
  • @Marged - 不,这不好,因为如果密码中的最后一个字符是1,它将失败。然后将其解析为标准输出文件句柄,并将有效地从输出中剥离。
  • @KoryGill - 当然,您的变量版本最后不会生成空格,因为在重定向之前您的源代码中没有空格。但是echo %foobar% >foobar.txt 确实会产生不需要的空间。您的评论是红鲱鱼。
  • @dbenham 你试过了吗?至少在我的 Win10 上这没问题:set pass=ThatsA2 / echo %pass%> foo / type foo 只会返回 ThatsA2
【解决方案2】:

批处理程序读取输出的内容并将其存储在文本文档中,因此如果您执行echo Hello,则输出Hello不是 echo Hello 并且如果您输入 pause,则 输出Press any key to continue ...,就像在屏幕上而不是在代码中一样。如果你输入Password,你的password%newpw%将等于Password,如果你输入echo: %newpw%,屏幕将显示Password,所以输出是Password。我会使用echo: 而不是echo,因为echo: 将允许输出 在保存在文本文档中时有空格,并且不会出现任何错误,例如刚刚关闭的批处理文件。

   echo: %newpw% >> C:\ProgramData\---\%newun%\%newun%pw.txt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多