【问题标题】:CMD - redirect cd command output into new fileCMD - 将 cd 命令输出重定向到新文件
【发布时间】: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
...
...

【问题讨论】:

    标签: batch-file cmd command-prompt


    【解决方案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= 处理整行(没有它,它只会输出第一个单词)。当文件名或文件夹名中有空格时必不可少。

      【讨论】:

        猜你喜欢
        • 2016-09-09
        • 2018-06-07
        • 1970-01-01
        • 2015-10-30
        • 1970-01-01
        • 2012-07-05
        • 2010-09-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多