非常感谢您的帮助,但是……
使用 Windows 7 x64 从特定文件夹中的批处理文件运行命令
我使用许多 paq8/paq9 命令行压缩器来备份我的文件。其中许多都无法读取目录结构,因此需要将单个文件名放入特定的单行语法中。我可以从特定目录中的文本文件中获取文件列表,但它们自然是单个的。我需要创建一个文本文件来提供内容,但所有内容都在一行中,并用空格分隔。我的批处理在这里:
dir /a /b /-p /o:gen >%USERPROFILE%\Desktop\file_list_full.txt
我希望能够将此行弹出到批处理文件中任何文件夹并运行它来创建文件夹内容的文本列表
举例来说,这将给出:
Hello.exe
Help.txt
Big.png
sound.ogg
我需要的是:
Hello.exe Help.txt Big.png sound.ogg
paq 压缩结构的示例以及为什么需要这样做,特别是当您的文件夹中可能有几百个文件时!!
paq9a a Archive.paq9a -8 -c feasting.exe License.txt INFO.txt data.win D3DX9_43.dll data.big dbr.ut
我怎样才能做到这一点?
如果我保留要创建的文本文件,那么有没有办法用“空格”替换“新行”以获得所需的结果?
答案1
我想你可能需要宽格式输出,尝试一下/w
此选项与/B
使用 findstr 不兼容,因此请过滤掉标题和摘要。
C:> dir /a-d /w | findstr /B [a-zA-Z0-9]
Big.png Hello.exe Help.txt sound.ogg
警告:以上测试是在 Win7 上进行的。您似乎使用了不同的操作系统。
如果你有很多挑剔的要求,你可能需要拿出大锤。我喜欢Perl但你的里程可能会有所不同。
C:> perl -e "print join ' ', glob('*')"
Big.png Hello.exe Help.txt sound.ogg
答案2
dir /a /b /-p /o:gen >%USERPROFILE%\Desktop\file_list_full.txt/w
表示“宽”
如果您对空间非常重视,即真正的 ANSI/Ascii 值,我会通过 GSAR 使用查找/替换来传输命令。
将整个系统或特定指令的默认 cmd 窗口参数重置为不合适的值(例如“9999”),您将获得长行返回而不换行。
您应该回应空间是否绝对必要,并且要有字符代码值,这是一个细节,您可以分享您计划在何处重复使用输出的更多细节,因为它可能会为我们提供必要的信息。
答案3
“纯” cmd 行的替代方案(如果您需要“临时”列表,您可能会发现它很有用):
Win 资源管理器允许将多个选择放到应用程序上 - 特别是批处理文件。
简单示例-创建包含以下内容的批处理文件:
@echo off
echo %*
pause
然后打开资源管理器窗口,这样您就可以看到它,并将多个选定的文件拖放到它上面。它只会列出它们(并暂停以便您可以阅读),但添加重定向后,您的列表就会保存到文件中,或者用您的压缩器命令替换 echo,它将在列表上运行。
更新:仅获取文件名
@echo off
setlocal
:loop
if [%1]==[] goto end
set arg=%arg% "%~nx1"
shift
goto loop
:end
echo %arg%
pause
仍然受到最大命令长度(8192)的限制,正如我在链接的答案中概述的那样