Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.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
Cmd 按大小排序文件(执行文件除外)_Cmd - Fatal编程技术网

Cmd 按大小排序文件(执行文件除外)

Cmd 按大小排序文件(执行文件除外),cmd,Cmd,我需要按大小对当前目录中的文件进行排序,并将其移动到相应的文件夹中。困难在于不要触摸.bat文件。我不能这样做。 例如,此行将被移动.bat文件,脚本将被停止 forfiles /p %CD% /s /m *.* /c "cmd /c if @fsize gtr 100 move @file %~dp0/200" 只需锁定当前批处理文件 < "%~f0" ( forfiles .... ) 如果filesize>100,如果正在处理的文件的完整路径不等于当前批处理文件的完整路径

我需要按大小对当前目录中的文件进行排序,并将其移动到相应的文件夹中。困难在于不要触摸
.bat
文件。我不能这样做。 例如,此行将被移动
.bat
文件,脚本将被停止

forfiles /p %CD% /s /m *.* /c "cmd /c if @fsize gtr 100 move @file %~dp0/200"

只需锁定当前批处理文件

< "%~f0" (
    forfiles ....
)
如果filesize>100,如果正在处理的文件的完整路径不等于当前批处理文件的完整路径,则移动该文件

不确定目标是否应为当前文件夹的子目录或批处理文件所在文件夹的子目录(如果不相同),因此使用第一个选项

编辑2-如果由于某种原因,大小条件发生变化,并且文件夹处于检查范围内,则可以通过添加一个传统的If条件将其排除在外

forfiles /p "%cd%" /m * /c "cmd /c if @isdir==FALSE if @fsize gtr 100 if /i not @path==\"%~f0\" move @path \"%cd%\200\" "

只需锁定当前批处理文件

< "%~f0" (
    forfiles ....
)
如果filesize>100,如果正在处理的文件的完整路径不等于当前批处理文件的完整路径,则移动该文件

不确定目标是否应为当前文件夹的子目录或批处理文件所在文件夹的子目录(如果不相同),因此使用第一个选项

编辑2-如果由于某种原因,大小条件发生变化,并且文件夹处于检查范围内,则可以通过添加一个传统的If条件将其排除在外

forfiles /p "%cd%" /m * /c "cmd /c if @isdir==FALSE if @fsize gtr 100 if /i not @path==\"%~f0\" move @path \"%cd%\200\" "

我尽量避免使用FORFILES,因为它非常慢。我通常只在需要计算日期时才使用它

我认为,一个简单的FOR/R循环速度更快,也更简单。它将自动只迭代文件。它默认为您当前使用的当前目录

%%~fF
生成当前文件迭代的完整路径,
%%~zF
生成文件大小,
%%~f0
生成当前执行批处理脚本的完整路径

下面应该复制问题中代码的逻辑,但它也会阻止当前正在执行的批处理脚本的移动。我还将输出重定向到nul以隐藏移动的
1文件。
消息。此解决方案应该比FORFILES快得多

for /r %%F in (*) do if "%%~fF" neq "%~f0" do (
  if %%~zF gtr 100 move "%%F" "%~dp0\200" >nul
)
您可能希望也可能不希望将
/Y
选项添加到MOVE命令中


如果必须区分大于2 GB的大文件,则无法直接比较文件大小,因为批处理数字条件限制为2147483647。有关更多信息,请参阅,包括如何处理大文件大小的策略。

我尽量避免使用FORFILES,因为它非常慢。我通常只在需要计算日期时才使用它

我认为,一个简单的FOR/R循环速度更快,也更简单。它将自动只迭代文件。它默认为您当前使用的当前目录

%%~fF
生成当前文件迭代的完整路径,
%%~zF
生成文件大小,
%%~f0
生成当前执行批处理脚本的完整路径

下面应该复制问题中代码的逻辑,但它也会阻止当前正在执行的批处理脚本的移动。我还将输出重定向到nul以隐藏移动的
1文件。
消息。此解决方案应该比FORFILES快得多

for /r %%F in (*) do if "%%~fF" neq "%~f0" do (
  if %%~zF gtr 100 move "%%F" "%~dp0\200" >nul
)
您可能希望也可能不希望将
/Y
选项添加到MOVE命令中



如果必须区分大于2 GB的大文件,则无法直接比较文件大小,因为批处理数字条件限制为2147483647。有关更多信息,请参阅,包括如何处理大文件的策略。

我遇到的困难是理解您的问题。相应文件夹的含义是什么?另外,您希望保留所有
.bat
文件的当前位置,还是仅保留当前正在执行的文件?@dbenham例如名为
100
200
300
(按需要排序的文件大小命名)的文件夹@dbenham只是目前正在执行的一个我的困难是理解你的问题。相应的文件夹是什么意思?另外,您想保留所有
.bat
文件的当前位置,还是仅保留当前正在执行的文件?@dbenham例如名为
100
200
300
(按需要排序的文件大小命名)@dbenham仅保留当前正在执行的文件+1,这是一个聪明的方法。但是,会生成不需要的错误消息,或者如果将错误重定向到nul,则所有错误都将丢失。理想情况下,它应该只在文件本身不存在的情况下尝试移动文件,以便保留错误消息。此外,还应该添加额外的代码,以防止尝试移动文件夹。@dbenham,嗯,对于我来说,fsize在文件夹的情况下返回0,因此,大小文本将排除它们,但无论如何,测试目录是否包含好的一点。但是我假设分类逻辑会变得更复杂,一个文件也可以有大小=0.+1,这是一个聪明的方法。但是,会生成不需要的错误消息,或者如果将错误重定向到nul,则所有错误都将丢失。理想情况下,它应该只在文件本身不存在的情况下尝试移动文件,以便保留错误消息。此外,还应该添加额外的代码,以防止尝试移动文件夹。@dbenham,嗯,对于我来说,fsize在文件夹的情况下返回0,因此,大小文本将排除它们,但无论如何,测试目录是否包含好的一点。但是我假设分类逻辑将变得更加复杂,并且一个文件的大小也可以为0。
如果
对被检查值的限制只会影响测试的正确部分。只要它保持在2147483648以下,它将独立于系统的大小工作file@MCND-不,双方都受到相同的影响。但是,只有在需要区分大于2GB的文件时,这才成为一个问题。进行数字IF比较时,任何大于2GB的数字都将被视为2GB。也许这就是你所说的你的社区