Powershell从文件中剥离所有目录路径

Powershell从文件中剥离所有目录路径,powershell,batch-file,Powershell,Batch File,我要做的是编写一个脚本,读取文本文件的每一行,“directory.txt”,并将每一行导出到一个文件,而不是一个目录。下面的例子 我只是想删除像“C:\users”这样的目录的路径 并保留指向“C:\users\file.txt”这样的文件的任何路径 在测试文件Direcory.txt中,“将有以下内容: C:\path\path\folder\ C:\path\path\file.ext C:\path\path\path\path\path\folder 脚本需要读取上面的文本文件,并将下

我要做的是编写一个脚本,读取文本文件的每一行,“directory.txt”,并将每一行导出到一个文件,而不是一个目录。下面的例子

我只是想删除像“C:\users”这样的目录的路径 并保留指向“C:\users\file.txt”这样的文件的任何路径

在测试文件Direcory.txt中,“将有以下内容:

C:\path\path\folder\
C:\path\path\file.ext
C:\path\path\path\path\path\folder

脚本需要读取上面的文本文件,并将下面的行导出到新的文本文件中

C:\path\path\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来处理。0

我不确定我是否理解这个问题(批处理示例显示了所有路径),也许这就是您要查找的:

Get-Content directory.txt | Where-Object {$_ -eq 'C:\path\path\file.ext'}

您没有说明是否关心它们是否为有效路径。以下输出到主机的行要么是有效文件(使用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}$")) { $_ } }

FTR:如果“%~x1“neq”没有达到您预期的效果,则条件
。它不仅匹配文件夹,而且匹配没有扩展名的文件

无论如何,在PowerShell中,您可能会执行类似操作,只列出非目录的项目:

Get-Content \PATH\TO\directory.txt `
  | Get-Item `
  | Where-Object { -not $_.PSIsContainer } `
  | Select-Object FullName

抱歉,我编辑了第一篇文章,以显示脚本应该做什么。实际上它完全符合我的意图,它将只回显带有扩展名的文件,并将忽略目录。只是测试以验证。如果没有_ext
,它将不会输出像
C:\path\file\u这样的内容。如果这是您想要的,您必须将
Where Object
条件从
-not$\pscontainer
更改为
$\u.Extension-ne”“
。这不是我想要的。我只是想删除指向“C:\users\”这样目录的路径,并保留指向“C:\users\file.txt”这样文件的任何路径,然后,就像我之前说过的,
“%~x1”neq”“
不会执行您想要的操作,因为它还将排除没有扩展名的文件。我最初的建议将满足您对计算机上存在的文件/文件夹的要求。如果要测试不存在的路径,则无法区分文件夹和无扩展名的文件。在这种情况下,您的最佳选择很可能是这样的:
Get Content\PATH\TO\directory.txt | where{$\匹配“\.[^\\]*$”}