سؤال

أحاول نسخ مجموعة من الدلائل.لدي ملفات نصية لها اسم مشابه وأحتاج إلى مطابقة الدلائل مع تلك الملفات النصية لتحديد الدلائل التي سيتم نسخها.

هذا ما فعلته ولا أستطيع معرفة كيفية إصلاحه.أنا أدور في دوائر.

$destination = "..\..\$args\Images\"
$txtfiles = Get-ChildItem $destination -Include *.txt
$source = "..\..\..\Images\" | ?{ $_.PSIsContainer } | Where-Object { $_.Name -Like "*$txtfiles*" } | Copy-Item $destination

مثال لملف txt: 1e03655b-0aac-48b2-82f3-75942084af7a.txt

والمجلد: name.1e03655b-0aac-48b2-82f3-75942084af7a

لذلك أحتاج إلى العثور على المجلدات التي تطابق ملفات txt ونسخ المجلد إلى دليل ملف txt.

شكرًا

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

المحلول

تريد توسيع خصائص BaseName لتلك الملفات النصية (لقطع جزء .txt) والحصول على مجموعة من السلاسل مثل:

1e03655b-0aac-48b2-82f3-75942084af7a
1e03655b-0aac-48b2-82f3-75942084af7b
1e03655b-0aac-48b2-82f3-75942084af8g
1e03655b-0aac-48b2-82f3-75942084afba

ثم الخاص بك $source = يحتاج السطر إلى سحب قائمة الدليل وليس فقط توجيه سلسلة أسفل المسار، وبعد ذلك أقترح مطابقة أسماء الدليل مع تطابق regex، والتحقق لمعرفة ما إذا كانت هذه المطابقة صحيحة -in $txtfiles.

$destination = "..\..\$args\Images\"
$txtfiles = Get-ChildItem $destination -Filter *.txt | Select -ExpandProperty BaseName
$source = "..\..\..\Images\"
GCI $source -Directory | ?{ $_.Name -match "(\w{8}-\w{4}-\w{4}-\w{4}-\w{12})$" } | %{If($Matches[1] -in $txtfiles){Copy-Item $_.FullName $destination}}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top