0

私がやろうとしているのは、テキストファイル「directory.txt」の各行を読み取り、ディレクトリではなくファイルにすべての行をエクスポートするスクリプトを作成することです。以下の例。

「C:\users\」のようなディレクトリへのパスを削除し、「C:\users\file.txt」のようなファイルへのパスを保持しようとしています。

テスト ファイル Direcory.txt には、次のように記述されています。

C:\path\path\folder\
C:\path\path\file.ext
C:\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

バッチ スクリプトは 400 MB のファイルを処理できないため、PowerShell を使用して処理する必要があります o.0

4

3 に答える 3

1

FTR: この状態if "%~x1" neq ""は、あなたが期待しているようには見えません。フォルダーだけでなく、拡張子のないファイルにも一致します。

とにかく、PowerShell では、おそらく次のようにして、ディレクトリではないアイテムのみを一覧表示します。

Get-Content \PATH\TO\directory.txt `
  | Get-Item `
  | Where-Object { -not $_.PSIsContainer } `
  | Select-Object FullName
于 2012-09-12T10:57:42.243 に答える
0

私は質問を理解しているかどうかわかりません (バッチの例はすべてのパスを示しています)、おそらくそれがあなたが探しているものです:

Get-Content directory.txt | Where-Object {$_ -eq 'C:\path\path\file.ext'}
于 2012-09-12T10:22:49.667 に答える
0

それらが有効なパスであるかどうかを気にするかどうかは言いませんでした。次のコマンドは、有効なファイル (Test-Path コマンドレットの '-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}$")) { $_ } }
于 2012-09-12T10:41:44.847 に答える