2016-12-05 55 views
0

我有一個批處理文件,使用下面的代碼拷貝一個文件夾(sourcefolder)的內容到另一個(destfolder):迪爾排序discrepency

robocopy /mt:128 /e /r:1 /w:1 /tee /log:%robolog% %sourcefolder% %destfolder% 

然後我想生成的所有文件的列表在這兩個地點按名稱排序。我使用以下幾行來生成這些列表:

dir /s /b /a-d /o:n %sourcefolder% > %sourcelist% 
dir /s /b /a-d /o:n %destfolder% > %destlist% 

由於某些原因,列表未按同樣的方式排序。例如,源列表可能看起來像:

sourcefolder\subfolder1\text.txt 
sourcefolder\subfolder2\abc.txt 
sourcefolder\subfolder3\file.exe 

但目的地列表可能看起來像:

destfolder\subfolder2\abc.txt 
destfolder\subfolder3\file.exe 
destfolder\subfolder1\text.txt 

我想不通爲什麼dir命令是生成列出了沒有以相同的順序。在移動到批處理文件的下一部分之前,我需要確保這些列表的順序相同。

+2

'DIR/S/B /廣告/ O:N% destfolder%| sort>%destlist%' – 2016-12-05 18:06:56

回答

1

dir /S命令對每個子目錄分別應用指定的排序順序(/O:N),但它不對目錄排序。然而,有sort命令,可以在這裏使用:

dir /B /S /A:-D /O:N "%sourcefolder%" | sort > "%sourcelist%" 
dir /B /S /A:-D /O:N "%destfolder%" | sort > "%destlist%" 
-1

您可能希望從那裏命令的結果:

where/r "%sourcefolder%" *.*>"%sourcelist%" 
where/r "%destfolder%" *.*>"%destlist%" 
+0

'where''不強制排序,所以結果與'dir'沒有'/ O'選項相同... – aschipfl

+0

沒有人說它強制排序,也沒有人要求強制排序。 OP問了一個沒有回答的問題。 _(它們的命令都匹配,所以它們的工作方式應該相同,但不要)_。我提供了一個可能不會出現相同差異的替代命令。 – Compo

+0

'dir'沒有'/ O'和'where'(還有'for',...)以相同的順序返回項目,這主要取決於文件系統和文件分配表中的條目; OP實際上是要求爲這兩個目錄提供一個非隨機的順序,所以我恐怕'Where'絕對不是一個解決方案... – aschipfl