কেন এমন?
ওয়াইল্ডকার্ডস নিবন্ধে কেউ " কেন এটি? " এর উত্তর খুঁজে পেতে পারেন :
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
অন্য পদ্ধতি: হিসাবে findstr
regex প্রয়োগdir *.* | findstr /V "<.*>"