Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.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
Windows 将特定数量的文件移动到新创建的编号文件夹中_Windows_Batch File_Cmd - Fatal编程技术网

Windows 将特定数量的文件移动到新创建的编号文件夹中

Windows 将特定数量的文件移动到新创建的编号文件夹中,windows,batch-file,cmd,Windows,Batch File,Cmd,我目前在一个文件夹中有大约550个文件,具有相同的格式(.csv)和相同的标题(都以字母“YL”开头) 我想知道是否有办法将这些文件(一次50个文件)(顺序无关紧要)拆分成带编号的文件夹?(例如1、2、3、4、5)并为剩余文件创建后续文件夹 我已经找到了这个脚本,并试图修改它的50个文件,但它似乎只创建了第一个文件夹(subdir1) 我不喜欢你发现的脚本,因为它很难阅读,并且使用临时文件来跟踪文件列表。(而且,它显然不起作用,所以就是这样。) @echo关闭 设置/a cnt=50 设置/a

我目前在一个文件夹中有大约550个文件,具有相同的格式(.csv)和相同的标题(都以字母“YL”开头)

我想知道是否有办法将这些文件(一次50个文件)(顺序无关紧要)拆分成带编号的文件夹?(例如1、2、3、4、5)并为剩余文件创建后续文件夹

我已经找到了这个脚本,并试图修改它的50个文件,但它似乎只创建了第一个文件夹(subdir1)


我不喜欢你发现的脚本,因为它很难阅读,并且使用临时文件来跟踪文件列表。(而且,它显然不起作用,所以就是这样。)

@echo关闭
设置/a cnt=50
设置/a fnum=0
对于/F“delims=“%%F IN('dir/b/a-d*.csv')DO(
调用:移动文件“%%f”
)
后藤:结束
:moveFile
如果“%cnt%”等于“50”,则调用:makeDir
移动“%~1”“%fnum%\%~1”
设置/a cnt+=1
后藤:EOF
:makeDir
设置/a fnum+=1
mkdir%fnum%
设置/a cnt=0
后藤:EOF
:结束

我不喜欢您找到的脚本,因为它很难阅读,并且使用临时文件来跟踪文件列表。(而且,它显然不起作用,所以就是这样。)

@echo关闭
设置/a cnt=50
设置/a fnum=0
对于/F“delims=“%%F IN('dir/b/a-d*.csv')DO(
调用:移动文件“%%f”
)
后藤:结束
:moveFile
如果“%cnt%”等于“50”,则调用:makeDir
移动“%~1”“%fnum%\%~1”
设置/a cnt+=1
后藤:EOF
:makeDir
设置/a fnum+=1
mkdir%fnum%
设置/a cnt=0
后藤:EOF
:结束

这里是另一种方法。我们测试目录中是否还有文件,如果有,创建一个新目录并复制50个文件

@echo off & setlocal enabledelayedexpansion
set fold_cnt=1
:test
set file_cnt=50
dir /a-d YL*.csv | findstr /IRC:"File(s)"
     if %errorlevel% equ 0 (
         mkdir !fold_cnt!
       ) else (
         goto :eof
   )
for %%i in (YL*.csv) do (
     if not !file_cnt! equ 0 (
         set /a file_cnt-=1
         move /Y "%%i" "!fold_cnt!\%%i"
      )
   )
set /a fold_cnt+=1
goto test

这里有另一种方法。我们测试目录中是否还有文件,如果有,创建一个新目录并复制50个文件

@echo off & setlocal enabledelayedexpansion
set fold_cnt=1
:test
set file_cnt=50
dir /a-d YL*.csv | findstr /IRC:"File(s)"
     if %errorlevel% equ 0 (
         mkdir !fold_cnt!
       ) else (
         goto :eof
   )
for %%i in (YL*.csv) do (
     if not !file_cnt! equ 0 (
         set /a file_cnt-=1
         move /Y "%%i" "!fold_cnt!\%%i"
      )
   )
set /a fold_cnt+=1
goto test


向我们展示您拥有的代码并指出其中的问题。更新后:d向我们展示您拥有的代码并指出其中的问题。更新后:d由于我不熟悉批处理脚本,您能否向我解释/b/a-d代表什么?
/b
只打印文件名,不打印任何额外信息<代码>/a-d不是目录。当我最初写这篇文章时,我不记得您的场景是专门针对csv文件的,所以我为任何文件编写了它。此外,为了将来参考,如果您使用
/?
运行它,几乎任何命令/命令行实用程序都会显示使用信息。因此,像
dir/?
一样,您可以获得有关
/b/a
的信息。谢谢您提供的附加信息,顺便说一句,您只为csv文件添加了*csv:D@Gerhard啊,对。我已经习惯了猛击。我更新了答案。因为我不熟悉批处理脚本,你能解释一下/b/a-d代表什么吗?
/b
只打印文件名,不打印任何额外信息<代码>/a-d不是目录。当我最初写这篇文章时,我不记得您的场景是专门针对csv文件的,所以我为任何文件编写了它。此外,为了将来参考,如果您使用
/?
运行它,几乎任何命令/命令行实用程序都会显示使用信息。因此,像
dir/?
一样,您可以获得有关
/b/a
的信息。谢谢您提供的附加信息,顺便说一句,您只为csv文件添加了*csv:D@Gerhard啊,对。我已经习惯了猛击。我更新了答案。我不知道批处理支持
+=
。Cool@dx_over_dt这是首选的方法,而不是“是”
set/a var+=1
看起来也比
set/a var=%var%+1
好得多。我刚刚在网上找到了一些脚本。我已经很久没能胜任批处理了。
有什么用呢!档案做什么?像什么是感叹号?@dx_over_dt当
设置变量并在括号内的代码块中使用它时,变量需要在执行时展开,而不是在解析时展开。因此,我们通过
setLocalEnableDelayedExpansion
来实现这一点。但是,我们需要告诉
cmd
需要扩展哪个变量,因此我们将
%
替换为
。您可以从
cmd
执行
set/?
setlocal/?
来查看详细说明。我不知道批处理支持
+=
。Cool@dx_over_dt这是首选的方法,而不是“是”
set/a var+=1
看起来也比
set/a var=%var%+1
好得多。我刚刚在网上找到了一些脚本。我已经很久没能胜任批处理了。
有什么用呢!档案做什么?像什么是感叹号?@dx_over_dt当
设置变量并在括号内的代码块中使用它时,变量需要在执行时展开,而不是在解析时展开。因此,我们通过
setLocalEnableDelayedExpansion
来实现这一点。但是,我们需要告诉
cmd
需要扩展哪个变量,因此我们将
%
替换为
。您可以从
cmd
执行
set/?
setlocal/?
以查看详细说明。