好简单,我想制作一个批处理脚本:
我遇到的问题是我正在尝试使用 echo 将预期的新脚本文本从原始批处理文件复制到新批处理文件中,如下所示:
@echo off
mkdir "C:\Users\%username%\Desktop\Export"
echo dir "C:\Users\%username%\Desktop\Export" /W /A:-H /B > "C:\Users\%username%\Desktop\Readout.txt" > "C:\Users\%username%\Desktop\Export\Directoty_List.bat"
问题是 echo 命令将“>”视为语句的结尾,并将第一部分写入桌面文本文件,但我希望它看到第二个“>”。我该如何解决这个问题?
谢谢你
正如@Richard 在评论中所说,您可以使用插入符
>
来逃避^>
。如果您不想使用特殊含义,则可以使用插入符号转义大多数在 cmd 中具有特殊含义的字符。echo
也会打印引号,所以这对你的情况没有真正的帮助。但仍然值得一提的是,引号在设置具有特殊字符的变量值、传递具有特殊字符的参数、定义具有特殊字符的路径(例如空格或括号)时有所帮助,...但不适用于 echo
。
我想再提一个建议:你可以使用
%userprofile%
而不是指定整个路径 C:\Users\%username%
@echo off
mkdir "%userprofile%\Desktop\Export"
echo dir "%userprofile%\Desktop\Export" /W /A:-H /B ^> "%userprofile%\Desktop\Readout.txt" > "%userprofile%\Desktop\Export\Directoty_List.bat"
您需要将字符串放在括号中。
@回声关闭
我认为用您提出的方法不可能输出两个文件:
mkdir "%userprofile%\Desktop\Export"
(dir "%userprofile%\Desktop\Export" /W /A:-H /B) > %userprofile%\Desktop\Readout.txt
(echo %userprofile%\Desktop\Readout.txt) > "%userprofile%\Desktop\Export\Directoty_List.bat"
要使该语句成为一个字符串,您需要使用运算符
()
和 &
。
mkdir "%userprofile%\Desktop\Export" & ((dir "%userprofile%\Desktop\Export" /W /A:-H /B) > %userprofile%\Desktop\Readout.txt) & (echo %userprofile%\Desktop\Readout.txt) > "%userprofile%\Desktop\Export\Directoty_List.bat"
随意修改操作员! 根据经验,如果您使用
else
、>
或 >>
,则需要括号以避免不必要的 For
语句。
例如:
for /f "skip=7 delims=:" %a in ('tree C:\Wallpapers /f') do echo %a >> C:\temp\1.txt
将解析目录树,跳过前 7 行,并将文件名附加到名为“1”的 txt 文件中。
术语
delims=:
用于将 Space/tab
的默认分隔符替换为 :
,以读取文件名中的任何空格。我使用这个刺作为后端来制作 HTML Gallery。