好的我要做的是制作一个脚本,它将读取文本文件的每一行,“directory.txt”并导出文件的每一行而不是目录。示例如下。
我只是想删除“C:\ users \”等目录的路径 并保留任何文件的路径,如“C:\ users \ file.txt”
在测试文件中,Direcory.txt“会有以下内容:
C:\路径\路径\文件夹\
C:\路径\路径\ file.ext
C:\路径\路径\路径\路径\文件夹
脚本需要读取上面的文本文件并将以下行导出到新的文本文件中。
C:\路径\路径\ file.ext
等效的批处理脚本如下:
@ECHO OFF
FOR /F %%A IN (directory.txt) DO CALL:NoDir "%%A"
pause
EXIT /B
:NoDir
IF "%~x1" NEQ "" ECHO %~1>>nodir.txt
EXIT /B
批处理脚本无法处理400mb的文件,因此需要使用powershell来执行o.0
答案 0 :(得分:1)
FTR:条件if "%~x1" neq ""
没有达到您所期望的效果。它不仅会匹配文件夹,还会匹配没有扩展名的文件。
无论如何,在PowerShell中,你可能会做这样的事情,只列出不是目录的项目:
Get-Content \PATH\TO\directory.txt `
| Get-Item `
| Where-Object { -not $_.PSIsContainer } `
| Select-Object FullName
答案 1 :(得分:0)
我不确定我是否理解这个问题(批处理示例显示所有路径),也许这就是您要找的内容:
Get-Content directory.txt | Where-Object {$_ -eq 'C:\path\path\file.ext'}
答案 2 :(得分:0)
你没有说你是否担心它们是否有效。以下向主机输出有效文件的行(使用Test-Path cmdlet的'-PathType leaf'参数),或者路径中最后一项的最后4个字符是一个点后跟3个字母
$Lines = Get-Content C:\Path\to\file.txt
foreach ( $line in $Lines )
{
if ( (Test-Path $line -PathType leaf) -OR ($line -match "\.\w{3}$") )
{
Write-Host $line
}
}
如果您发现文件扩展名超过3个字母,则可以相应地更改正则表达式("\.\w{3,4}$"
用于4个字符的扩展名,或"\.[\w\d]{3,4}$
以匹配3或4个字符长的扩展名。包括数字)
单线:
Get-Content C:\Path\to\file.txt | % { if ((Test-Path $_ -PathType Leaf) -OR ($_ -match "\.\w{3}$")) { $_ } }