[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[技术讨论] 這個 dir 不知嚇跑多少人

本帖最后由 nwm310 于 2016-11-25 19:55 编辑

Z:\>tree /f
列出資料夾 PATH
磁碟區序號為 00000099 5566:7788
Z:.
├─a1
│  └─a2
│          3.txt

└─b1
    └─b2
            3.txt


Z:\>dir  /b /s
Z:\a1
Z:\b1
Z:\a1\a2
Z:\a1\a2\3.txt
Z:\b1\b2
Z:\b1\b2\3.txt                cmd結果
=======================================

PS Z:\> (dir  -r).FullName
Z:\a1
Z:\b1
Z:\a1\a2
Z:\a1\a2\3.txt
Z:\b1\b2
Z:\b1\b2\3.txt                PowerShell結果
================================================
Z:\>dir a* /b /s
Z:\a1
Z:\a1\a2
                cmd結果:
                        列出 a* (N層)
================================================
PS Z:\> (dir a*  -r).FullName
Z:\a1\a2
Z:\a1\a2\3.txt

                PowerShell結果:
                        少了 Z:\a1      多了 Z:\a1\a2\3.txt

================================================
待測試理論:
        dir a*  -r 的兩種意思:
                dir a* 的結果只有資料夾:
                        進入 Z:\a*   列出「裡面的所有內容(不篩選)」  (N層)
                        Z:\a* 本身不列出

                dir a* 的結果 其他情形(找不到 or 只有檔案  or 有檔案和資料夾):
                        列出 a* (N層)

測試 in PowerShell 5.0
=================================================
dir 3* 的結果(找不到)

PS Z:\> (dir 3*  -r).FullName
Z:\a1\a2\3.txt
Z:\b1\b2\3.txt

                列出 3* (N層)
=================================================
md Z:\3 之後
dir 3* 的結果(只有資料夾)

PS Z:\> (dir 3*  -r).FullName
PS Z:\>

                進入 Z:\3*   列出「裡面的所有內容(不篩選)」  (N層)
                Z:\3* 本身不列出

                Z:\3* 裡面沒東西,所以沒反應
==================================================
新增 Z:\3\5.txt  Z:\3\7  Z:\3\7\9.txt
dir 3* 的結果(只有資料夾)

PS Z:\> (dir 3*  -r).FullName
Z:\3\7
Z:\3\7\9.txt
Z:\3\5.txt

                進入 Z:\3*   列出「裡面的所有內容(不篩選)」  (N層)
                Z:\3* 本身不列出
===================================================
新增 Z:\3F.jpg 之後
dir 3* 的結果(有檔案和資料夾)

PS Z:\> (dir 3*  -r).FullName
Z:\3
Z:\a1\a2\3.txt
Z:\b1\b2\3.txt
Z:\3F.jpg
                列出 3* (N層)
====================================================
刪除 Z:\3 之後
dir 3* 的結果(只有檔案)

PS Z:\> (dir 3*  -r).FullName
Z:\a1\a2\3.txt
Z:\b1\b2\3.txt
Z:\3F.jpg

                列出 3* (N層)

=====================================================


不使用 *  明確寫出名稱的情形

Z:\>dir a1 /b /s
Z:\a1\a2
Z:\a1\a2\3.txt

PS Z:\> (dir a1  -r).FullName
Z:\a1\a2
Z:\a1\a2\3.txt

=====================================================

待測試理論 (-r 和 -i 的搭配):

        dir a*  -r 的兩種意思:
                dir a* 的結果只有資料夾:
                        進入 Z:\a*   列出「裡面的所有內容(不篩選)」  (N層)
                        Z:\a* 本身不列出

                dir a* 的結果 其他情形(找不到 or 只有檔案  or 有檔案和資料夾):
                        列出 a* (N層)


        dir a* -r -i *
                dir a* 的結果:
                        如果是檔案,符合 「-i 所篩選的內容」就列出
                        也就是:要檢查兩個地方   a* 和   -i *

                        如果是資料夾,進入 Z:\a*   用 -i * 去篩選裡面的內容   (N層)
                        Z:\a* 本身不列出
                        也就是:用 a* 來檢查「起始點資料夾」   用 -i * 來檢查內容物 (N層)               

測試 in PowerShell 5.0
====================================================
PS Z:\> tree /f
列出資料夾 PATH
磁碟區序號為 000000D2 5566:7788
Z:.
├─a1
│  └─a2
│          3.txt

└─b1
    └─b2
            3.txt
=====================================================
dir a* 的結果(只有資料夾)

PS Z:\> (dir a* -r).FullName
Z:\a1\a2
Z:\a1\a2\3.txt
                進入 Z:\a*   列出「裡面的所有內容(不篩選)」  (N層)
                Z:\a* 本身不列出


PS Z:\> (dir a* -r -i *).FullName
Z:\a1\a2
Z:\a1\a2\3.txt

PS Z:\> (dir a* -r -i *2).FullName
Z:\a1\a2

PS Z:\> (dir a* -r -i *2 , 3*).FullName
Z:\a1\a2
Z:\a1\a2\3.txt

PS Z:\> (dir a* -r -i  3*).FullName
Z:\a1\a2\3.txt

PS Z:\> (dir a* -r -i a*).FullName
Z:\a1\a2

PS Z:\> (dir a* -r -i *.txt).FullName
Z:\a1\a2\3.txt

PS Z:\> (dir a* -r -i a*, *.txt).FullName
Z:\a1\a2
Z:\a1\a2\3.txt
                進入 Z:\a*   用 -i * 去篩選裡面的內容  (N層)
                Z:\a* 本身不列出

==============================================
新增 Z:\a5.txt 之後
dir a* 的結果(有檔案和資料夾)

PS Z:\> (dir a* -r).FullName
Z:\a1
Z:\a1\a2
Z:\a5.txt
                列出 a* (N層)


PS Z:\> (dir a* -r -i *).FullName
Z:\a1\a2
Z:\a1\a2\3.txt
Z:\a5.txt

PS Z:\> (dir a* -r -i *2).FullName
Z:\a1\a2

PS Z:\> (dir a* -r -i *2 , 3*).FullName
Z:\a1\a2
Z:\a1\a2\3.txt

PS Z:\> (dir a* -r -i *2 , 3*, *5*).FullName
Z:\a1\a2
Z:\a1\a2\3.txt
Z:\a5.txt
                        Z:\a5.txt 符合兩個地方,所以列出

PS Z:\> (dir a* -r -i a*).FullName
Z:\a1\a2
Z:\a5.txt

PS Z:\> (dir a* -r -i *.txt).FullName
Z:\a1\a2\3.txt
Z:\a5.txt
================================================
dir 3* 的結果(沒有東西)

PS Z:\> (dir 3* -r).FullName
Z:\a1\a2\3.txt
Z:\b1\b2\3.txt
                列出 3* (N層)

PS Z:\> (dir 3* -r -i *).FullName
PS Z:\>
                沒反應,Z:\3* 沒有找到東西
===================================================
新增 Z:\3F.jpg 之後
dir 3* 的結果(只有檔案)

PS Z:\> (dir 3* -r).FullName
Z:\a1\a2\3.txt
Z:\b1\b2\3.txt
Z:\3F.jpg
                列出 3* (N層)

PS Z:\> (dir 3* -r -i *).FullName
Z:\3F.jpg

PS Z:\> (dir 3* -r -i *2).FullName
PS Z:\>
                        -i *2 不符合,所以沒列出
                       
PS Z:\> (dir 3* -r -i *g).FullName
Z:\3F.jpg


=====================================================
待測試理論 -i * (有 -r 無 -r的時候):

        dir a* -r -i *
                dir a* 的結果:
                        如果是檔案,符合 「-i 所篩選的內容」就列出
                        也就是:要檢查兩個地方   a* 和   -i *

                        如果是資料夾,進入 Z:\a*   用 -i * 去篩選裡面的內容  (N層)
                        Z:\a* 本身不列出
                        也就是:用 a* 來檢查「起始點資料夾」   用 -i * 來檢查內容物 (N層)       



        dir a* -i *
                dir a* 的結果:
                        如果是檔案,符合 「-i 所篩選的內容」就列出
                        也就是:要檢查兩個地方   a* 和   -i *


                        如果是資料夾,符合 「-i 所篩選的內容」之後,用 -i * 去篩選裡面的內容  (只有 1 層)
                        也就是:Z:\a*要檢查兩個地方   a* 和   -i *
                                裡面的內容要檢查一個地方   -i *

                        Z:\a* 本身一律不列出

                        問題在於:資料夾就算符合了 -i *  也不會列出
                                  資料夾內容不符合 a* 仍然會列出


測試 in PowerShell 5.0
==================================================
PS Z:\> tree /f
列出資料夾 PATH
磁碟區序號為 00000076 5566:7788
Z:.
├─a1
│  └─a2
│          3.txt

└─b1
    └─b2
            3.txt
===================================================
dir a* 的結果(只有資料夾)

PS Z:\> (dir a* -r -i *).FullName
Z:\a1\a2
Z:\a1\a2\3.txt
PS Z:\> (dir a* -r -i *2).FullName
Z:\a1\a2
PS Z:\> (dir a* -r -i 3*).FullName
Z:\a1\a2\3.txt
                        進入 Z:\a*   用 -i * 去篩選Z:\a*裡面的內容  (N層)
                        Z:\a* 本身不列出
                        也就是:用 a* 來檢查「起始點資料夾」   用 -i * 來檢查內容物 (N層)

不使用 -r
PS Z:\> (dir a*  -i *).FullName
Z:\a1\a2
                        Z:\a1 符合 a* 和 -i *
                        a2 符合 -i *

PS Z:\> (dir a*  -i *2).FullName
PS Z:\>
                        沒反應,Z:\a1 不符合  -i *2

PS Z:\> (dir a*  -i *1 , *2).FullName
Z:\a1\a2
                        Z:\a1 符合  a*  和  -i *1
                        a2 符合 -i *2

====================================================
新增 Z:\a5.txt 之後
dir a* 的結果(有檔案和資料夾)

PS Z:\> (dir a* -r -i *).FullName
Z:\a1\a2
Z:\a1\a2\3.txt
Z:\a5.txt

PS Z:\> (dir a* -r -i *2).FullName
Z:\a1\a2

PS Z:\> (dir a* -r -i *2,3*).FullName
Z:\a1\a2
Z:\a1\a2\3.txt

PS Z:\> (dir a* -r -i *2,3*, *5*).FullName
Z:\a1\a2
Z:\a1\a2\3.txt
Z:\a5.txt


不使用 -r
PS Z:\> (dir a*  -i *).FullName
Z:\a1\a2
Z:\a5.txt
                        Z:\a1沒列出
                        Z:\a1\a2 列出了

PS Z:\> (dir a*  -i *2).FullName
PS Z:\>
                        沒反應,Z:\a1 不符合  -i *2
                                Z:\a5.txt 不符合  -i *2

PS Z:\> (dir a*  -i *2,*1).FullName
Z:\a1\a2

                        Z:\a1 符合 a* 和 -i *1
                        a2符合 -i *2
PS Z:\> (dir a*  -i *2, *1 , *5*).FullName
Z:\a1\a2
Z:\a5.txt

                        Z:\a1 符合 a* 和 -i *1
                        a2符合 -i *2

                        Z:\a5.txt符合 a* 和 -i *5*
=================================================
dir 3* 的結果(沒有東西)

PS Z:\> (dir 3* -r -i *).FullName
PS Z:\>

                沒反應,Z:\3* 沒有找到東西

不使用 -r
PS Z:\> (dir 3*  -i *).FullName
PS Z:\>

                沒反應,Z:\3* 沒有找到東西
================================================
新增 Z:\3F.jpg 之後
dir 3* 的結果(只有檔案)
PS Z:\> (dir 3* -r -i *).FullName
Z:\3F.jpg

PS Z:\> (dir 3* -r -i *2).FullName
PS Z:\>
                沒反應, 3F.jpg 不符合 *2

不使用 -r
PS Z:\> (dir 3*  -i *).FullName
Z:\3F.jpg

PS Z:\> (dir 3*  -i *2).FullName
PS Z:\>
                沒反應, 3F.jpg 不符合 *2




================================================
有* 無* 的差別

PS Z:\> tree /f
列出資料夾 PATH
磁碟區序號為 00000078 5566:7788
Z:.
├─a1
│  └─a2
│          3.txt

└─b1
    └─b2
            3.txt


PS Z:\> (dir * -r).FullName
Z:\a1\a2
Z:\a1\a2\3.txt
Z:\b1\b2
Z:\b1\b2\3.txt

PS Z:\> (dir  -r).FullName
Z:\a1
Z:\b1
Z:\a1\a2
Z:\a1\a2\3.txt
Z:\b1\b2
Z:\b1\b2\3.txt

PS Z:\> (dir * -r -i *).FullName
Z:\a1\a2
Z:\a1\a2\3.txt
Z:\b1\b2
Z:\b1\b2\3.txt

PS Z:\> (dir  -r -i *).FullName
Z:\a1
Z:\a1\a2
Z:\a1\a2\3.txt
Z:\b1
Z:\b1\b2
Z:\b1\b2\3.txt

                -path 沒有* 起始點不一樣

不使用 -r
PS Z:\> (dir * -i *).FullName
Z:\a1\a2
Z:\b1\b2

PS Z:\> (dir  -i *).FullName
PS Z:\>
                在根目錄 使用 -i (沒有 -r)
                -path 需要 *  否則沒反應
                -path 的檔名部份是空的

PS Z:\> (dir Z:\ -i *).FullName
PS Z:\>
                在根目錄 使用 -i (沒有 -r)
                -path 需要 *  否則沒反應
                -path 的檔名部份是空的

PS Z:\> (dir Z:\a1 -i *).FullName
Z:\a1\a2
               
PS Z:\> cd Z:\a1
PS Z:\a1> (dir  -i *).FullName
Z:\a1\a2

                -path不需要 *   -path的檔名部份 有 a1

PS Z:\> (dir Z:\a1\a2 -i *).FullName
Z:\a1\a2\3.txt

PS Z:\a1> cd Z:\a1\a2
PS Z:\a1\a2> (dir  -i *).FullName
Z:\a1\a2\3.txt
                -path 不需要 *   -path的檔名部份 有 a2

PS Z:\a1\a2> (dir  -i *  -file).FullName
PS Z:\a1\a2>

                沒反應, 「-path 為 Z:\a1\a2」  與 -file 不符合

PS Z:\a1\a2> (dir *  -i *  -file).FullName
Z:\a1\a2\3.txt

                -path需要 *           -path 為 Z:\a1\a2\*

PS Z:\> (dir Z:\a1\* -i *).FullName
Z:\a1\a2\3.txt
PS Z:\> (dir Z:\a1\a2\* -i *).FullName
Z:\a1\a2\3.txt
                暈

===================================================
-include的用途
1.在某樹狀範圍進行過濾
dir  -r -i *

2.在某些檔案裡(只有檔案、沒有資料夾)進行過濾  (搭配 -file)
dir Z:\a1\a2\*  -i *   -file

台湾有个唐凤(原名唐汉宗),特别牛叉

TOP

返回列表