CMD - 将 cd 命令输出重定向到新文件

Posted

技术标签:

【中文标题】CMD - 将 cd 命令输出重定向到新文件【英文标题】:CMD - redirect cd command output into new file 【发布时间】:2021-09-09 16:38:39 【问题描述】:

Is it possible to Redirect cd command output into new file 这里是C:\ Partition中的路径列表

C:\Inetpub\vhosts\apnat\httpdocs
C:\Inetpub\vhosts\interline\httpdocs
C:\Inetpub\vhosts\dentin\httpdocs
C:\Inetpub\vhosts\archm\httpdocs
C:\Inetpub\vhosts\archacom\httpdocs
C:\Inetpub\vhosts\arowmom\httpdocs
C:\Inetpub\vhosts\myrin\httpdocs
...

有些路径可以打开且没有错误,有些则没有拒绝访问错误我正在尝试将所有可打开的路径保存到新文件中并尝试使用此命令

for /f %x in (paths.txt) do cd %x | echo %cd%>>C:\users\vb3\results.txt
for /f %x in (paths.txt) do (cd %x & echo %cd%>>C:\users\vb3\results.txt)

我正在尝试使用这些命令,但 输出文件为空 或填充了同一行

C:\Windows\SysWOW64\inetsrv
C:\Windows\SysWOW64\inetsrv
C:\Windows\SysWOW64\inetsrv
C:\Windows\SysWOW64\inetsrv
...
...

【问题讨论】:

【参考方案1】:

使用 PowerShell 的另一种方法。也许更易于理解和维护。

$ResultsFile = 'C:\users\vb3\results.txt'
if (Test-Path -Path $ResultsFile)  Remove-Item -Path $ResultsFile 
Get-Content -Path '.\paths.txt' |
    ForEach-Object 
        if ((Test-Path -Path $_) -and (Get-ChildItem -Path $_ -ErrorAction SilentlyContinue)) 
            Out-File -FilePath $ResultsFile -Encoding ascii -Append -InputObject $_
        
    

【讨论】:

【参考方案2】:

您有一个delayed expansion problem(这会导致%cd% 每次运行的值都相同)。

但是当你使用条件执行时你并不真的需要它:

for /f "delims=" %x in (paths.txt) do cd "%x" 2>nul && echo %x >> "C:\users\vb3\results.txt"

逐行写入文件行很慢(因为必须打开文件,读取文件直到文件末尾,写入并关闭每一行(您可能不会注意到行,但有数千行,它是巨大的(我们所说的因子是 1000 甚至更多)。更好地一次性重定向整个输出(简而言之:(loop with many echoes here)>file.txt 而不是 loop with many "echo>>file.txt"

(for /f "delims=" %x in (paths.txt) do cd "%x" 2>nul && echo %x)>"C:\users\vb3\results.txt"

&& 充当“如果先前的命令 (cd ...) 成功,则”。

如果你需要相反,使用||(“如果之前的命令失败,那么”):

(for /f "delims=" %x in (paths.txt) do cd "%x" 2>nul || echo %x>"C:\users\vb3\denied.txt")

2>nul 将任何错误消息 (access is denied) 重定向到“nirvana”(抑制它们)delims= 处理整行(没有它,它只会输出第一个单词)。当文件名或文件夹名中有空格时必不可少。

【讨论】:

以上是关于CMD - 将 cd 命令输出重定向到新文件的主要内容,如果未能解决你的问题,请参考以下文章

将windows命令行的结果保存到文件 (cmd命令的重定向输出)

将程序输出重定向到文件和shell [重复]

运维管道和重定向语法

将命令行进程的标准输出重定向到文件

将 cmd 中命令的输出重定向到 Python 3 中的变量

如何将标准输出重定向到 CMD 中的程序?