Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search 使用批处理脚本搜索和排序目录和子目录_Search_Sorting_Batch File - Fatal编程技术网

Search 使用批处理脚本搜索和排序目录和子目录

Search 使用批处理脚本搜索和排序目录和子目录,search,sorting,batch-file,Search,Sorting,Batch File,我一直在尝试在一所小学的用户目录和子目录中搜索所有应用程序、音乐、视频和存档文件,以检查孩子们对我隐瞒了什么。我一直在使用与此类似的基本dir脚本: dir C:\Sample\*.exe, C:\Sample\*.rar, C:\Sample\*.mp3 /s /b /OE > D:\Result.txt 这为我提供了按用户名排序的这些类型的所有文件的输出 我想知道的是,有没有一种简单的方法可以将搜索更改为按类型排序,或者在以后使用sort命令按文件的最后一个字符排序 输出样本: U

我一直在尝试在一所小学的用户目录和子目录中搜索所有应用程序、音乐、视频和存档文件,以检查孩子们对我隐瞒了什么。我一直在使用与此类似的基本dir脚本:

dir C:\Sample\*.exe, C:\Sample\*.rar, C:\Sample\*.mp3  /s /b /OE > D:\Result.txt
这为我提供了按用户名排序的这些类型的所有文件的输出

我想知道的是,有没有一种简单的方法可以将搜索更改为按类型排序,或者在以后使用sort命令按文件的最后一个字符排序

输出样本:

U:\adwan4\My Documents\My Videos\PhotoStory1.wmv
U:\ageeg2\My Documents\install_flashplayer11x32ax_gtbp_chra_aih.exe
U:\amcka55\My Documents\My Music\Angus.wmv
我已经想出了一些似乎可以使用Find实现的技巧,大致如下:

Find ".exe" D:\Result.txt >>D:\Sorted.txt
这似乎对avi、exe等运行良好。不过,如果有任何建议,我将非常高兴。

给你

for %%x in (exe,mp3) do (
for /r C:\Dir %%a in (*.%%x) do echo %%a >>D:\Results.txt
)

在不使用/S选项的情况下运行DIR/O sort选项可以正常工作。但是当您使用/S选项时,它会对每个目录中的结果进行单独排序,而您希望对整个结果集进行排序

Balic的编辑答案通过单独执行多个搜索来解决问题,每个文件扩展名一个搜索。他选择使用FOR命令来迭代文件并回显结果。我相信只使用多个DIR命令更简单

>d:result.txt (
  dir /s /b C:\Sample\*.exe
  dir /s /b C:\Sample\*.rar
  dir /s /b C:\Sample\*.mp3
)
或者,也许打字少一点

>d:result.txt (
  for %%X in (exe rar mp3) do dir /s /b C:\Sample\*.%%X
)

对于任何感兴趣的人来说,我的初始解决方案(因为没有循环,所以需要更多的输入)如下所示:

ECHO Off
dir U:\*.exe, U:\*.rar, U:\*.mp3  /s /b > D:\Result.txt
Echo Applications > D:\Sorted.txt
Echo --------------------------- >>D:\Sorted.txt
Find ".exe" D:\Result.txt >>D:\Sorted.txt
Echo Music >> D:\Sorted.txt
Echo --------------------------- >>D:\Sorted.txt
Find ".mp3" D:\Result.txt >>D:\Sorted.txt
Echo --------------------------- >>D:\Sorted.txt
Find ".wma" D:\Result.txt >>D:\Sorted.txt


需要进行更多的设置工作,这是一个两步过程。这个解决方案看起来也不像我看到的任何一个选项那么优雅。谢谢你的帮助。

基本上我希望它扩展显示,这样我提供的示例将显示为:
U:\ageeg2\My Documents\install\U flashplayer11x32ax\U gtbp\U chra\U aih.exe
U:\adwan4\My Documents\My Videos\PhotoStory1.wmv
U:\amcka55\My Documents\My Music\Angus.wmv
类似的内容OK,你想按扩展名排序吗?就像显示所有的exe,然后是所有的mp3等等,这正是我想要做的,抱歉搞混了。谢谢澄清:)试试我的脚本,它应该能做到。我试过了,它仍然按目录排序。运行它后,前6个是前6个,然后是一些MP3,然后是更多的前6个等等。非常感谢。我真的很感谢你的帮助,我目前正在通过试错学习一些bat脚本。我主要担心的是,由于脚本不是针对C:\Sample(这只是为了测试它),而是针对服务器上的用户目录,因此运行多个dir命令可能需要相当长的时间。我没有意识到批处理脚本实际上有多灵活。+1用于自己动手,有时是一件罕见的事情:)