2012-09-12 74 views
0

好的我想要做的是製作一個腳本,它將讀取文本文件的每一行,「directory.txt」並將每行都導出到文件而不是目錄。下面的例子。Powershell從文件中刪除所有目錄路徑

我只是想刪除的路徑類似目錄「C:\用戶\」 ,並保持那就是像一個文件的任何路徑爲「C:\用戶\ 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

我不知道我明白這個問題(批處理示例顯示所有路徑),也許這就是你要找的:

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

對不起編輯的第一篇文章,顯示什麼腳本應該做的事。 – user1451070

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}$")) { $_ } } 
1

FTR:條件if "%~x1" neq ""不會做你似乎會發生什麼。它不僅會匹配文件夾,還會匹配沒有擴展名的文件。

無論如何,在PowerShell中你可能會做這樣的事情只列出不在目錄項:

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

其實它確實是我的意圖,它只會迴應帶擴展名的文件,並會忽略目錄。只是測試驗證。 – user1451070

+0

它不會輸出類似'C:\ path \ file_without_ext'的東西。如果這就是你想要的,你必須將'Where-Object'條件從'-not $ _。PSIsContainer'改爲'$ _。Extension -ne「」''。 –

+0

那是不是我想要的即時通訊只是試圖刪除像「C:\ users \」目錄的路徑,並保持任何路徑是像「C:\ users \ file.txt」文件 – user1451070