পাওয়ারশেলের ফাইলগুলির পুরো পথ পান


145

আমার একটি বিশেষ ধরণের অন্তর্গত সাবফোল্ডারগুলিতে উপস্থিত ফাইলগুলি সহ সমস্ত ফাইলগুলি পাওয়া দরকার।

আমি গেট-চাইল্ড আইটেম ব্যবহার করে এরকম কিছু করছি :

Get-ChildItem "C:\windows\System32" -Recurse | where {$_.extension -eq ".txt"}

তবে এটি কেবল ফাইলের নাম আমার কাছে ফিরিয়ে দিচ্ছে পুরো পথটি নয়।

উত্তর:


219

| select FullNameউপরের আপনার লাইনের শেষে যুক্ত করুন । এর পরে যদি আপনাকে আসলে কিছু করার দরকার হয় তবে আপনাকে এটিকে একটি ফোরচ লুপে পাইপ করতে হতে পারে:

get-childitem "C:\windows\System32" -recurse | where {$_.extension -eq ".txt"} | % {
     Write-Host $_.FullName
}

101

দেরিতে ফিল্টারিং ব্যবহারের চেয়ে এটি আরও দ্রুত সম্পাদন করা উচিত:

Get-ChildItem C:\WINDOWS\System32 -Filter *.txt -Recurse | % { $_.FullName }

14
এটা সত্য. একটি সতর্কতামূলক: এই কমান্ডটি আসলে *.txt*( -Filterসিএমডি ওয়াইল্ডকার্ড ব্যবহার করে) মতো ফাইলগুলি পায় । এটি যদি আপনি চান না তবে ব্যবহার করুন -Include *.txt
রোমান কুজমিন

26

আপনি সিলেক্ট-অবজেক্টটি এর মতো ব্যবহার করতে পারেন:

Get-ChildItem "C:\WINDOWS\System32" *.txt -Recurse | Select-Object FullName

5
নোট করুন যে Select-Objectফিরে আসে PSCustomObject, একটি স্ট্রিং নয়। আপনি যদি অন্য প্রোগ্রামের প্যারামিটার হিসাবে ফলাফল ব্যবহার করেন তবে এটি কাজ নাও করতে পারে
চিন্তসু

5
হ্যাঁ @ চিন্টসু যা বলেছিলেন তা নিয়ে। পরিবর্তে স্ট্রিং পেতে , কেবল পরিবর্তে PSCustomObjectব্যবহার -ExpandProperty FullNameকরুন FullName। আমি যতদূর বুঝতে পেরেছি, -ExpandPropertyপ্যারামিটারের সাহায্যে কিছু কাস্টম অবজেক্টের পরিবর্তে নির্দিষ্ট বৈশিষ্ট্যের (নেটিভ?) টাইপ হিসাবে ফলাফলগুলি ফিরে আসতে সেমিডলেট দেয়।
ডাবলডাউন

আমারও সময় প্রয়োজন (আমি একটি প্রোগ্রামের উত্সের সাথে গোলযোগ করেছি এবং পরে ভেবেছিলাম যে আমার সম্ভবত এটির উপর সোর্স কন্ট্রোল শুরু করা উচিত ছিল, তবে প্রতিষ্ঠানের পর থেকে ফাইল পেয়ে আমি "মাস্টার" এর বিরুদ্ধে আমার প্রথম প্রতিশ্রুতি সম্পর্কে ধারণা পেতে পারি:Get-ChildItem -Path 'C:\Program Files\TheProgram' -Recurse | Where-Object -FilterScript {($_.LastWriteTime -gt '2020-03-01')} | Select-Object FullName
নীল গাই লিন্ডবার্গ

19

এখানে একটি সংক্ষিপ্ত:

(Get-ChildItem C:\MYDIRECTORY -Recurse).fullname > filename.txt

23
এখানে একটি সংক্ষিপ্ততর রয়েছে:(gci -r c:\).fullname
ক্রিস এন

11
এখানে একটি সংক্ষিপ্ত:(ls -r c:\).fullname
কালামানে

15
এখানে একটি সংক্ষিপ্ততর:(ls -r c:).fullname
ভ্যালিয়েন্ট

9

আপেক্ষিক পথগুলি যদি আপনি চান তবে আপনি কেবল -Nameপতাকাটি ব্যবহার করতে পারেন ।

Get-ChildItem "C:\windows\System32" -Recurse -Filter *.txt -Name


5
Get-ChildItem -Recurse *.txt | Format-Table FullName

এটাই আমি ব্যবহার করেছি। আমি মনে করি এটি আরও বোধগম্য কারণ এটিতে কোনও লুপ সিনট্যাক্স নেই।


5

PS 5 তে সত্যিই বিরক্তিকর জিনিস, যেখানে $ _ পূর্বাভাসের মধ্যে পুরো পথ হবে না। এগুলি ফাইলআইএনফো এবং ডিরেক্টরি ইনফো অবজেক্টগুলির স্ট্রিং সংস্করণ। কোনও কারণে পথের একটি ওয়াইল্ডকার্ড এটি ঠিক করে দেয় বা পাওয়ারশেল or বা use ব্যবহার করুন আপনি মাঝখানে আইটেমটি পেতে পাইপও করতে পারেন।

Get-ChildItem -path C:\WINDOWS\System32\*.txt -Recurse | foreach { "$_" }

Get-ChildItem -path C:\WINDOWS\System32 -Recurse | get-item | foreach { "$_" }

এটি নেট সমস্যা নিয়ে সমাধান হয়েছে seems নেট কোর ( পাওয়ারশেল )) এর সাথে সমস্যা হয়েছে বলে মনে হয়: ফাইলআইএনফো / ডিরেক্টরি উদাহরণগুলির স্ট্রিংফিকেশন আচরণটি v6.0.2 # 7132 থেকে পরিবর্তিত হয়েছে


4

এটি আমার পক্ষে কাজ করেছে এবং নামের তালিকা তৈরি করে:

$Thisfile=(get-childitem -path 10* -include '*.JPG' -recurse).fullname

get-member -membertype propertiesঅবিশ্বাস্যরূপে কার্যকর কমান্ডটি ব্যবহার করে এটি পেয়েছি । অপশন এটা আপনি দেয় অধিকাংশ একটি সঙ্গে যুক্ত হয় .<thing>, মত fullnameএখানে। আপনি একই কমান্ড আটকে রাখতে পারেন;

  | get-member -membertype properties 

যে কোনও কমান্ডের শেষে আপনি তাদের সাথে কী করতে পারেন সেগুলি এবং কীভাবে এগুলি অ্যাক্সেস করবেন সে সম্পর্কে আরও তথ্যের জন্য:

get-childitem -path 10* -include '*.JPG' -recurse | get-member -membertype properties

3

এটা চেষ্টা কর:

Get-ChildItem C:\windows\System32 -Include *.txt -Recurse | select -ExpandProperty FullName

2
আপনার প্রয়াসের সাথে কী আলাদা এবং অন্যটি কেন কাজ করে না সে সম্পর্কে দয়া করে কিছুটা তথ্য যুক্ত করুন।
উয়ে অলনার

2

কেন কেউ এখনও ফোরচ লুপ ব্যবহার করেনি? এখানে একটি সমর্থক হ'ল আপনি সহজেই আপনার পরিবর্তনশীলটির নাম রাখতে পারেন:

# Note that I'm pretty explicit here. This would work as well as the line after:
# Get-ChildItem -Recurse C:\windows\System32\*.txt
$fileList = Get-ChildItem -Recurse -Path C:\windows\System32 -Include *.txt
foreach ($textfile in $fileList) {
    # This includes the filename ;)
    $filePath = $textfile.fullname
    # You can replace the next line with whatever you want to.
    Write-Output $filePath
}

ফাইললিস্টে ফোরচ টেক্সটফিল ব্যবহার না করে আমি কীভাবে টেক্সটফাইলের পৃথক ফাইলপথ পেতে পারি? টেক্সটফাইলে = L ফাইললিস্টের মতো কিছু [$ i]। পুরো নাম, আমি জানি সবচেয়ে অনুকূল পন্থা নয় তবে আমার এটি এইভাবে করা দরকার :(
হবার সলিস

শুধু একটি যোগ $সামনে textfile: $textfile = $fileList[$i].FullName। ধরে $iনেওয়া একটি সংখ্যার মান আছে, যে।
নস্ট্রাডাভিড

1
gci "C:\WINDOWS\System32" -r -include .txt | select fullname

6
আপনি যে উত্তরটি সরবরাহ করেন সে সম্পর্কে আরও কিছু বিবরণ যুক্ত করে আরও উত্তর দিতে পারেন?
অ্যারিসোন

1

[বিকল্প বাক্য গঠন]

কিছু লোকের জন্য, নির্দেশমূলক পাইপ অপারেটরগুলি তাদের স্বাদ নয়, তবে তারা বরং শৃঙ্খলা পছন্দ করে। রোজলিন ইস্যু ট্র্যাকারে ভাগ করা এই বিষয়ে কিছু আকর্ষণীয় মতামত দেখুন: ডটনেট / রোস্লিন # 5445

কেস এবং প্রসঙ্গের ভিত্তিতে, এই পদ্ধতির একটি অন্তর্নিহিত (বা অপ্রত্যক্ষ) বিবেচনা করা যেতে পারে। উদাহরণস্বরূপ, এক্ষেত্রে গণনার বিরুদ্ধে পাইপ ব্যবহারের জন্য বিশেষ টোকেন প্রয়োজন $_(ওরফে)PowerShell's "THIS" token ) কারও কারও কাছে বিরক্তিকর হতে পারে।

যেমন বন্ধুরা জন্য, এখানে আরও সংক্ষিপ্ত সঙ্গে এরকম সোজা সম্মুখগামী উপায় ডট chaining :

(gci . -re -fi *.txt).FullName

(<গলাবাজি> দ্রষ্টব্য যে PowerShell হুকুম আর্গুমেন্ট পার্সার আংশিক প্যারামিটার নাম গ্রহণ করে তাই ছাড়াও। -recursive; -recursiv, -recursi, -recurs, -recur, -recu, -recএবং -reগৃহীত হয়, কিন্তু দুর্ভাগ্যবশত না -r.. যা শুধুমাত্র সঠিক পছন্দ যে একক সঙ্গে ইন্দ্রিয় তোলে -অক্ষর (যদি আমরা পসিমিক ইউনিক্স কনভেনশনগুলি দিয়ে যান)!


1
ভাড়ার জন্য নোট করুন: -rসংক্ষিপ্ত রূপটি -Recurseআমার পক্ষে কাজ করে।
পলিমারফিক্স

@ পলিমারফিক্স, আপনি ঠিক বলেছেন, এটি আমার জন্য উইন্ডোজ 10 এ কাজ করছে (নিশ্চিত নয় যে আমি আগে কোন সংস্করণটি ব্যবহার করেছিলাম)। তবে, নমুনায় -Fileস্যুইচ করার -fiক্ষেত্রে এটি একই সত্য : -filএবং -fileকাজ করে তবে তা হয় না -f। পসিক্স স্টাইল অনুসারে, এটি হওয়া উচিত --file(বহু-অক্ষর) এবং -f(একক-বর্ণ, -f অন্য কোনও কিছুর জন্য সংরক্ষিত না হলে, forceসুইচ বলুন , তবে এটি অন্যরকম কিছু হতে পারে -lবা একক-বর্ণের বিকল্প নয়)।
ভলকান রেভেন

1

সমস্ত ফোল্ডার পাথ উত্তোলনের জন্য আমি নীচের স্ক্রিপ্টটি ব্যবহার করছি:

Get-ChildItem -path "C:\" -Recurse -Directory -Force -ErrorAction SilentlyContinue | Select-Object FullName | Out-File "Folder_List.csv"

পূর্ণ ফোল্ডার পাথ আসছে না। ১১৩ টি অক্ষরের পরে আসছেন:

Example - C:\ProgramData\Microsoft\Windows\DeviceMetadataCache\dmrccache\en-US\ec4d5fdd-aa12-400f-83e2-7b0ea6023eb7\Windows...

0

আমি এই লাইন কমান্ডটি "সি: \ টেম্পে" "" এক্সএলএম "ফাইলগুলি অনুসন্ধান করতে এবং ফলাফল" টেক্সট। টেক্সট "ফাইলের প্রিন্টের পুরো নাম পথটি অনুসন্ধান করতে ব্যবহার করেছি:

(Get-ChildItem "C:\Temp" -Recurse | where {$_.extension -eq ".xml"} ).fullname > result.txt 

আমার পরীক্ষায়, এই সিনট্যাক্সটি আমার জন্য সুন্দর কাজ করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.