是否可以将cd
命令输出重定向到新文件以下是C:
分区中的路径列表
C:Inetpubvhostsapnathttpdocs
C:Inetpubvhostsinterlinehttpdocs
C:Inetpubvhostsdentinhttpdocs
C:Inetpubvhostsarchmhttpdocs
C:Inetpubvhostsarchacomhttpdocs
C:Inetpubvhostsarowmomhttpdocs
C:Inetpubvhostsmyrinhttpdocs
...
有些路径是可打开的,没有错误,有些路径不是访问被拒绝错误我正在尝试将所有可打开的路径保存到新文件中,并尝试使用此命令
for /f %x in (paths.txt) do cd %x | echo %cd%>>C:usersvb3results.txt
for /f %x in (paths.txt) do (cd %x & echo %cd%>>C:usersvb3results.txt)
我正在尝试使用这些命令,但输出文件为空或填充了同一行
C:WindowsSysWOW64inetsrv
C:WindowsSysWOW64inetsrv
C:WindowsSysWOW64inetsrv
C:WindowsSysWOW64inetsrv
...
...
您有一个延迟扩展问题(这会导致每次运行的%cd%
值相同(。
但当你使用条件执行时,你并不真正需要它:
for /f "delims=" %x in (paths.txt) do cd "%x" 2>nul && echo %x >> "C:usersvb3results.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:usersvb3results.txt"
CCD_ 6充当";如果先前的命令(cd ...
(成功,则";。
如果您需要oposite,请使用||
("如果以前的命令失败,则"(:
(for /f "delims=" %x in (paths.txt) do cd "%x" 2>nul || echo %x>"C:usersvb3denied.txt")
CCD_ 9将任何错误消息(CCD_;涅盘;(抑制它们(delims=
处理整行(如果没有它,它只会输出第一个字(。当文件名或文件夹名中有空格时,这是必不可少的。
使用PowerShell的另一种方法。也许更容易理解和维护。
$ResultsFile = 'C:usersvb3results.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 $_
}
}