سؤال

أي يحدث لديهم عينة البرنامج النصي recursing دليل معين في الملفات مع باورشيل ؟ في النهاية ما أريد القيام به هو إنشاء برنامج نصي من شأنها أن تولد NSIS ملف قوائم بالنسبة لي بالنظر إلى دليل.شيء جدا على غرار ما تم القيام به هنا مع باش النصي.

هل كانت مفيدة؟

المحلول

كما halr9000 أظهرت يمكنك استخدام -recurse التبديل المعلمة Get-ChildItem cmdlet استرداد كافة الملفات والدلائل في إطار المسار المحدد.

يبدو أن سيناريو باش كنت مرتبطة في سؤالك يحفظ الدلائل كذلك, حتى هنا هو وظيفة بسيطة إلى عودة كل الملفات والدلائل في نتيجة واحدة وجوه:

function Get-InstallFiles {
  param( [string]$path )

  $allItems = Get-ChildItem -path $path -recurse
  $directories = $allItems | ? { $_.PSIsContainer } | % { $_.FullName }
  $installFiles = $allItems | ? { -not $_.PSIsContainer } | % { $_.FullName }
  $uninstallFiles = $installFiles[-1..-$installFiles.Length]

  $result = New-Object PSObject
  $result | Add-Member NoteProperty Directories $directories
  $result | Add-Member NoteProperty InstallFiles $installFiles
  $result | Add-Member NoteProperty UninstallFiles $uninstallFiles
  return $result
}

هنا هو كيف يمكنك استخدامه لإنشاء نفس تثبيت/إلغاء تثبيت ملفات نصية من halr9000 المثال ، بما في ذلك إزالة الدلائل:

$files = Get-InstallFiles 'C:\some\directory'
$files.InstallFiles | Set-Content 'installfiles.txt'
$files.UninstallFiles + $files.Directories | Set-Content 'uninstallfiles.txt'

نصائح أخرى

هذا هو "إعادة صياغة" ميناء التي باش النصي.

$path = "c:\path\to\program"
$installFiles = "installfiles_list.txt"
$uninstFiles = "uninstfiles_list.txt"
$files = get-childitem -path $path -recurse | where-object { ! $_.psIsContainer } # won't include dirs
$filepath = $files | foreach-object { $_.FullName }
$filepath | set-content $installFiles -encoding ASCII
$filepath[($filepath.length-1)..0] | set-content $uninstFiles -encoding ASCII
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top