批处理脚本制作批处理脚本

问题描述 投票:0回答:2

好简单,我想制作一个批处理脚本:

  1. 在用户桌面上创建导出文件夹
  2. 从新(如不从某处复制)在该文件夹中创建一个批处理脚本,在用户填充该文件夹并将其保存到桌面后列出该文件夹的内容。

我遇到的问题是我正在尝试使用 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 命令将“>”视为语句的结尾,并将第一部分写入桌面文本文件,但我希望它看到第二个“>”。我该如何解决这个问题?

谢谢你

batch-file text copy echo
2个回答
0
投票

正如@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"

0
投票

您需要将字符串放在括号中。

@回声关闭

我认为用您提出的方法不可能输出两个文件:

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。

© www.soinside.com 2019 - 2024. All rights reserved.