`দির *। * Me আমাকে সমস্ত ফাইল এবং ফোল্ডার কেন দেয়?


62

যখন আমি dir *.*এটি চালায় তখন অপ্রত্যাশিত ফলাফল আসে। এমনকি তাদের নামে কোনও বিন্দুবিহীন ফাইল এবং ফোল্ডারগুলি তালিকাভুক্ত করা হয়েছে। উদাহরণ স্বরূপ

C:\>dir *.*
 Volume in drive C is System
 Volume Serial Number is AC0A-29DA

 Directory of C:\

14-03-2017  05:17 PM             8,192 ntuser.dat
03-01-2017  07:10 PM    <DIR>          Perl520
28-03-2017  10:13 AM    <DIR>          Program Files
28-03-2017  10:13 AM    <DIR>          Program Files (x86)
04-01-2017  03:25 PM    <JUNCTION>     Python27 [C:\Program Files\Anaconda]
06-02-2017  10:16 PM    <DIR>          SAP
28-03-2017  04:10 PM               152 useragent.log
03-01-2017  03:04 PM    <DIR>          Users
16-03-2017  04:24 PM    <DIR>          VM
22-03-2017  11:13 AM    <DIR>          Windows
               2 File(s)          8,344 bytes
               8 Dir(s)  270,172,966,912 bytes free

কেন এমন? কেবলমাত্র বিন্দু দিয়ে ফাইল তালিকাভুক্ত করার কোনও উপায় আছে?


19
বিন্দুটি সর্বদা সেখানে থাকে, এটি অনুসরণ না করে কেবল এটি মুদ্রিত হয় না। অন্য কথায়, আপনি ভাবতে পারেন যে কোনও ফাইলটির নাম "এটি আমার ফাইল" তবে গোপনে নামটি "এটি আমার ফাইল" " বিন্দু পরে কিছুই সঙ্গে। একত্রে, আপনি ভাবতে পারেন যে এই সাইটের জন্য ডিএনএসের নাম "সুপারইউজার ডটকম", তবে এটি আসলে "সুপারইউজার ডটকম"। দ্বিতীয় বিন্দু পরে কিছুই সঙ্গে।
টড উইলকক্স

12
@ ToddWilcox এটি ডস-এ সঠিক। উইন্ডোজে আধুনিক ফাইল
সিস্টেমগুলির

13
@ ল্যুভানহফহ্যাক উইন 32 সাবসিস্টেম এমন ফাইলের নাম ব্যবহার করে যার মধ্যে এটির .মতো একটি অন্তর্ভুক্ত থাকে না ., যার মধ্যে রয়েছে এটি সহ অনেকগুলি উদ্দেশ্য।
কোডসইনচাউস

2
যে ফোল্ডারগুলি .অক্ষরটি ধারণ করে না সেগুলির .শেষে একটি অন্তর্ভুক্ত অক্ষর থাকে। - উদাহরণস্বরূপ আপনার কাছে একটি "ব্লাহ.আল্ড" নামে একটি ফোল্ডার থাকতে পারে এবং তারপরে এটিতে একটি চিরাচরিত 3 অক্ষরের ফাইলের এক্সটেনশন থাকবে; প্রতিদিন ব্যবহারের জন্য যদিও " Blah" Blah.এটি ফাইল বা ফোল্ডার কিনা " " সমান as
BrainSlugs83

9
@ ক্যান-নেড_ফুড টড উইলকক্স ডিএনএস সম্পর্কে সঠিক। রুট ডিএনএস জোনটি আক্ষরিক হিসাবে উল্লেখ করা হয় ., এবং ডিএনএস নামগুলিতে লেবেলগুলি পৃথক করা হয় .(এইভাবে মূল ডিএনএস জোনের নামটি একটি একক শূন্য দৈর্ঘ্যের লেবেল)। রুট ডিএনএস জোন এক সন্তানের .হয় com., এবং এক সন্তান com.হয় superuser.com., ইত্যাদি।
একটি সিভিএন

উত্তর:


115

আমি এই উত্তরটি লিখছি কারণ ওপি এতে জোর দিয়েছে:

আমি যা আগ্রহী তা হ'ল কেন *.*সমস্ত ফাইলের সাথে মেলে, যেমন প্রশ্নে বলা হয়েছে

DIRকমান্ড একটা সময় ছিল যখন থেকে আসে:

  1. পিরিয়ড (।) ফাইল বা ফোল্ডারের নামগুলিতে অক্ষর হিসাবে অনুমোদিত ছিল না
  2. ফাইল এবং ফোল্ডার নামগুলি নামের জন্য 8 টি অক্ষর এবং এক্সটেনশনের জন্য 3 টি অক্ষর সীমাবদ্ধ ছিল

অতএব, যে আদর্শ দ্বারা, *.*meant যাই হোক না কেন নাম এবং যাই হোক না কেন এক্সটেনশন । এর অর্থ একটি "।" ধারণকারী একটি স্ট্রিং নয় , যার "বা" এর আগে বা পরে অক্ষর থাকতে পারে।

মাইক্রোসফ্ট নীতি পশ্চাদপদ সামঞ্জস্যতা সংরক্ষণ করছে। সুতরাং, সেই ব্যাখ্যাটি *.*বহাল রয়েছে।

তবে উইন্ডোজ পাওয়ারশেলের মধ্যে একটি "" "স্ট্রিং*.* অর্থ , " এর আগে বা পরে অক্ষর থাকতে পারে বা নাও থাকতে পারে ""



25
মূল ফাইল সিস্টেম এমনকি সময়কালে নিজেই ডিস্কে সঞ্চয় করে না, কেবলমাত্র 11 টি অক্ষর বাকী নামটি তৈরি করে।
মিস্টার লিস্টার

7
এটি লক্ষণীয় যে এক্সটেনশন ছাড়াই ফাইল এবং ফোল্ডারগুলিকে এখনও ফাঁকা এক্সটেনশন হিসাবে ধরা হয় । অতএব, উইন্ডো সম্পর্কিত যতদূর Folder." Folder" নামক একটি ফোল্ডার এবং " " নামের একটি ফোল্ডার একই জিনিসটির নাম দেওয়া হয়েছে।
BrainSlugs83

2
@ মিস্টারলিস্টার আকর্ষণীয়। AA.BB<প্রথম অংশে <8 এবং এক্সটেনশনে <3 এর মতো পুরানো এফএস স্টোর ফাইল নামগুলি কীভাবে করেছে ? এটা কি ফাঁকা জায়গা দিয়ে প্যাড করেছে?
কেলভিন

3
@ কেলভিন হ্যাঁ দুটি অংশই স্পেস-প্যাডযুক্ত ছিল।
প্লাগওয়াশ

12

কেন এমন?

ওয়াইল্ডকার্ডস নিবন্ধে কেউ " কেন এটি? " এর উত্তর খুঁজে পেতে পারেন :

The * wildcard will match any sequence of characters
               (0 or more, including NULL characters)

The ? wildcard will match a single character
               (or a NULL at the end of a filename)

...

ওয়াইল্ডকার্ড মেলানোর নিয়ম

  • *একটি ব্যতিক্রম (সাধারণত পরবর্তী নিয়ম দেখুন) সহ সাধারণত যে কোনও 0 বা ততোধিক অক্ষরের সাথে মেলে। অ-লোভী ওয়াইল্ডকার্ড মাস্কের অবশিষ্ট অংশটি মিলে যাওয়ার জন্য প্রয়োজনীয় যতগুলি বা কম কয়েকটি অক্ষরের সাথে মেলাতে বিনামূল্যে।

  • *.মুখোশের শেষে 0 ডট except ব্যতীত যে কোনও 0 বা ততোধিক অক্ষর মেলে} বাস্তবে, নিয়মটি * এবং টার্মিনাল {ডট between এর মধ্যে যে কোনও সংখ্যক {ডট} এবং {স্পেস} অক্ষরের সাথে প্রযোজ্য} এই পদটির জন্য নিয়মিত প্রকাশ"[*][. ]*[.]$"

  • ?0 বা একটি অক্ষর মেলে, ot ডট} ব্যতীত} এটি কেবলমাত্র 0 টি অক্ষরের সাথে মিলে যায় যখন এটি নামের শেষে বা {বিন্দু before এর আগে অবস্থানের সাথে মেলে} প্রশ্ন চিহ্নটি একাধিক চরিত্রের সাথে মিলে যাওয়ার জন্যও একাধিকবার ব্যবহার করা যেতে পারে।

জড়িতগত {ডট} একটি ফাইল / ফোল্ডার নামে আলাদা ঘাঁটি নাম এবং এক্সটেনশন। সুতরাং

  • dir *.কোনও আইটেম ছাড়াই সমস্ত আইটেম প্রদর্শন করে এবং
  • dir *.*শূন্য বা আরও বেশি অক্ষরের এক্সটেনশন সহ সমস্ত আইটেম প্রদর্শন করে ।

কঠোরভাবে বলতে গেলে, কোনও আইডেম ( নাম) ছাড়াই সমস্ত আইটেমdir *. প্রদর্শন করে । (বিটিডাব্লু, নামকরণ ফাইল, পাথ এবং নেমস্পেস এমএসডিএন নিবন্ধটি স্পষ্টতই বলেছে যে " একটি নামের প্রথম অক্ষর হিসাবে একটি সময় নির্দিষ্ট করা গ্রহণযোগ্য ")).

কেবলমাত্র বিন্দু দিয়ে ফাইল তালিকাভুক্ত করার কোনও উপায় আছে?

আমি তাই মনে করি না. যাইহোক, একটি মানানসই নিয়মিত অভিব্যক্তি সহ একটি workaround আছে।

পাওয়ারশেল ( পাওয়ারশেল কনসোলে ব্যবহৃত হলে সম্পূর্ণ স্কোপ সমাধান):

:: PowerShell - no extension, full syntax
PowerShell -c "Get-ChildItem | Where-Object {$_.Name -match '^.[^\.]*$'}"
:: PowerShell -    extension, alias syntax
PowerShell -c "dir | ? {$_.Name -match '^..*\...*$'}"

সিএমডি (কেবলমাত্র একটি ধারণাটির জন্য কিছু বিস্তারের প্রয়োজন হতে পারে):

:: CMD/batch - no extension
for /F "delims=" %%G in ('dir /OGN /B ^| findstr "^.[^\.]*$"') do @echo %%~tG %%~aG %%~zG %%~nxG
:: CMD/batch -    extension
for /F "delims=" %%G in ('dir /OGN /B ^| findstr "^..*\...*$"') do @echo %%~tG %%~aG %%~zG %%~nxG

সংযোজন: একটি বোনাস এবং ব্যাখ্যা

একটি স্বজ্ঞাত অনুমান যা Nameসংমিশ্রিত BaseNameএবং Extension ধারণ করে না । নিম্নলিখিত স্ক্রিপ্টটি এটি ব্যবহার করে cmdএবং PowerShellমূল বৈশিষ্ট্যগুলি প্রমাণ করে এবং অদ্ভুত ^..*\...*$ রেজেক্সটি এর ফলাফলগুলি থেকে উদ্ভূত হয়।

@ECHO OFF
SETLOCAL EnableExtensions DisableDelayedExpansion
set "_workingDirectory=%~1"
if "%_workingDirectory%"=="%tmp%\tests_SU_1193102" (
  >NUL 2>&1 (
      mkdir "%_workingDirectory%"
      pushd "%_workingDirectory%"
      rem make directories
      mkdir     .Fldr-Ext
      mkdir     aFldr-Ext
      mkdir     .Fldr.Ext
      mkdir     aFldr.Ext
      rem create files
      copy  NUL .File-Ext 
      copy  NUL aFile-Ext 
      copy  NUL .File.Ext 
      copy  NUL aFile.Ext
      popd
  )
) else if "%_workingDirectory%"=="" set "_workingDirectory=%CD%"
pushd "%_workingDirectory%"
set "_first=ItemName  Attributes    BaseName Extension"
echo ON
::                        dir /OGN | findstr "Ext$"
for /F "delims=" %%G in ('dir /OGN /B') do @((if defined _first (echo %_first%&echo(&set "_first="))&echo %%~nxG %%~aG  %%~nG   %%~xG)
::   Get-ChildItem | Select-Object -Property Mode, BaseName, Extension, Name
PowerShell -c "dir | select -pr Name, Mode, BaseName, Extension | sort -pr @{Expression='Mode';Descending=$true}, @{Expression='Name';Descending=$false}"

আউটপুট :

==> D:\bat\BaseName_vs_Extension.bat "%tmp%\tests_SU_1193102"

==> for /F "delims=" %G in ('dir /OGN /B') do @((if defined _first (echo ItemName  Attributes   BaseName Extension  & echo(  & set "_first=" ) )  & echo %~nxG %~aG     %~nG    %~xG )
ItemName  Attributes    BaseName Extension

.Fldr.Ext d----------   .Fldr   .Ext
.Fldr-Ext d----------           .Fldr-Ext
aFldr.Ext d----------   aFldr   .Ext
aFldr-Ext d----------   aFldr-Ext
.File.Ext --a--------   .File   .Ext
.File-Ext --a--------           .File-Ext
aFile.Ext --a--------   aFile   .Ext
aFile-Ext --a--------   aFile-Ext

==> PowerShell -c "dir | select -pr Name, Mode, BaseName, Extension | sort -pr @{Expression='Mode';Descending=$true}, @{Expression='Name';Descending=$false}"

Name      Mode   BaseName  Extension
----      ----   --------  ---------
.Fldr.Ext d----- .Fldr.Ext .Ext
.Fldr-Ext d----- .Fldr-Ext .Fldr-Ext
aFldr.Ext d----- aFldr.Ext .Ext
aFldr-Ext d----- aFldr-Ext
.File.Ext -a---- .File     .Ext
.File-Ext -a----           .File-Ext
aFile.Ext -a---- aFile     .Ext
aFile-Ext -a---- aFile-Ext

BaseNameফাইল এবং ফোল্ডারগুলির জন্য পৃথক সম্পত্তি সম্পর্কিত সংজ্ঞা তুলনা করুন :

PS D:\PShell> Get-ChildItem | Get-Member -Name BaseName | Format-List -property TypeName, Definition


TypeName   : System.IO.DirectoryInfo
Definition : System.Object BaseName {get=$this.Name;}

TypeName   : System.IO.FileInfo
Definition : System.Object BaseName {get=if ($this.Extension.Length -gt 
             0){$this.Name.Remove($this.Name.Length - 
             $this.Extension.Length)}else{$this.Name};}

আমার আসল উত্তরটি অযোগ্য ভুলভ্রান্তির উপর ভিত্তি করে ছিল:

পড়ুন dir /?, ব্যবহার করুন dir /A:-D:

/A          Displays files with specified attributes.
attributes   D  Directories                R  Read-only files
             H  Hidden files               A  Files ready for archiving
             S  System files               I  Not content indexed files
             L  Reparse Points             -  Prefix meaning not

অন্য পদ্ধতি: হিসাবে findstrregex প্রয়োগdir *.* | findstr /V "<.*>"


আমার আগ্রহের বিষয়টি হ'ল কেন *.*সমস্ত ফাইলের সাথে মেলে , যেমন প্রশ্নের মধ্যে বলা হয়েছে
ফুচলভি

আমি ভীত আপনার বিকল্প প্রস্তাব (findstr) ফোল্ডার করে একটি দিয়ে শুরু না পাও নেই am .মত .dbus-keyrings, .VirtualBoxএবং .vscode

22
সুতরাং dir /A:-Dকেবল খুশি যে ফাইলগুলি তালিকাবদ্ধ করে?
কোয়ান্টিন

4
"কেবল বিন্দু দিয়ে ফাইল তালিকাভুক্ত করার কোনও উপায় আছে কি?" dir /A:-Dভুল. 1 / এটি কোনও এক্সটেনশন ছাড়াই ফাইল তালিকাভুক্ত করে। 2 / এটি .তাদের নামে থাকা ডিরেক্টরিগুলি (পুরোপুরি আইনী) তালিকাভুক্ত করে না
ডেভিডপস্টিল

3
ওএমজি ... কয়েক দশক হয়ে গেছে যখন আমি শেষবার "
@ ইকো

7

কেবলমাত্র বিন্দু দিয়ে ফাইল তালিকাভুক্ত করার কোনও উপায় আছে?

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

dir "<.<"

মনে রাখবেন এটি <একটি মেটাচ্যারাক্টরও তাই কমান্ড শেল থেকে কোনও প্যাটার্নে ব্যবহার করার সময় আপনাকে এটিকে উদ্ধৃত করা বা এড়িয়ে চলতে হবে।


1
চমৎকার। এই
অনাবন্ধিত

1

কমান্ড লাইন ইন্টারপ্রেটার "সমস্ত এক্সটেনশন" সহ "সমস্ত বেস ফাইলের নাম" হিসাবে " " দেখতে পাবেন । একটি ফাঁকা এক্সটেনশানটি এখনও একটি এক্সটেনশন , সুতরাং এটি মিলবে এবং তালিকা সহ ফিরে আসবে। অন্যরা যেমন ব্যাখ্যা করেছে, এটি উইন্ডোজ এবং এমএস-ডস এর পূর্ববর্তী সংস্করণগুলির একটি হ্যাংওভার।

আপনি যদি পাওয়ারশেল ব্যবহার করে দেখে খুশি হন তবে এই ফাইলগুলি সন্ধান করা অনেক সহজ। নোট করুন যে পাওয়ারশেলে, "দির" হ'ল "গেট-চাইল্ড আইটেম" সেমিডলেট এর একটি নাম।

সমস্ত ফাইল (ডিরেক্টরি / ফোল্ডার নয়) সন্ধানের জন্য যার এক্সটেনশন রয়েছে (যেমন "মাইফাইল.টেক্সট", তবে "ফাইলউইথনঅেক্সট" নয়):

dir -af | Where {$_.Name -match "\."}

"-এফ" স্যুইচটি "-ফাইলে" এর শর্টহ্যান্ড যা কেবলমাত্র ফিরতি অবজেক্টগুলিকে সীমাবদ্ধ করে। "-ad" কেবল ডিরেক্টরিগুলি পেত। দ্য "\." "" একটি আক্ষরিক বিন্দু চরিত্র "এর অর্থ। ব্যাকস্ল্যাশ ছাড়াই বিন্দুটি স্ট্যান্ডার্ড রেজেক্স অনুসারে যে কোনও অক্ষরের সাথে মেলে।

এক্সটেনশন ছাড়াই নামের সাথে বিন্দুযুক্ত সমস্ত ফাইল পাওয়ার জন্য, পাশাপাশি একটি এক্সটেনশন (যেমন "myDocament_v1.1.doc" তবে "myfile.txt" নয়) পেতে:

dir -af | Where {$_.BaseName -match "\."}

তবে নোট করুন, এটি পূর্ববর্তী ডট সহ ".আরাইভ" নামে একটি ফাইল বাদ দেবে। এর কারণ এটির কোনও বেসনাম এবং "সংরক্ষণাগার" এর এক্সটেনশন না হিসাবে ধরা হয়। আপনি যদি এইগুলি অন্তর্ভুক্ত করতে চান:

dir -af | Where {$_.BaseName -match "\.|^$"}

এখানে, ম্যাচ প্যাটার্নটি বলেছে "A আক্ষরিক বিন্দু, OR (|) বিগিনিং অফ স্ট্রিং (^) এর পরে EndOfString ($) (অর্থাত একটি ফাঁকা স্ট্রিং)"। যেহেতু কোনও ফাইলের খালি বেসনাম এবং এক্সটেনশন উভয়ই থাকতে পারে না , এটি কোনও বিন্দু দিয়ে শুরু হওয়া ফাইলগুলি খুঁজে পেতে পারে।


পাওয়ারশেলের মধ্যে কেবলমাত্র ls *.*যথেষ্ট, যেমনটি অনেকেই আপনার আগে উত্তর দিয়েছিল
ফুচলভি

-2

যদি আপনি উপরের কমান্ডটি টাইপ করেন, তবে এখানে: * (এটি একটি ওয়াইল্ড কার্ড যার অর্থ অক্ষরের কোনও অনুক্রম) এর পরে একটি বিন্দু (।) এর পরে * এটি নামের মতো সমস্ত ফাইল প্রদর্শন করে ব্যাখ্যা করা যেতে পারে (অক্ষরের কোনও অনুক্রম) )। (অক্ষরের কোনও অনুক্রম) যার অর্থ হ'ল যে কোনও এক্সটেনশন সহ সমস্ত ফাইল দেখানো।


1
তাহলে তালিকায় কেন Program Filesঅন্তর্ভুক্ত? এটি প্যাটার্নের সাথে মেলে না <sequence of characters>.<sequence of characters>
গ্রোনস্টাজ

এটিকে <শূন্য বা আরও বেশি অক্ষরের ক্রম হিসাবে আরও ভাবেন> এ কারণেই এটি ".info" নামে একটি ফাইলও তুলবে যেখানে বেস নামটি ফাঁকা।
ডেভ_জে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.