簡體   English   中英

將特定數量的文件移動到新創建的編號文件夾中

[英]Moving specific number of files into newly created numbered folders

我目前在一個文件夾中有大約 550 個文件,它們具有相同的格式 (.csv) 和相同的標題(都以字母“YL”開頭)。

我想知道是否有辦法將這些文件(一次 50 個文件)(順序無關緊要)拆分為編號文件夾? (例如 1、2、3、4、5)並且還為剩余文件創建一個后續文件夾?

我找到了這個腳本並嘗試為 50 個文件修改它,但看起來它只創建了第一個文件夾(subdir1)

@echo off
set /a counter=1
set /a filesperfolder=50
cd dir\dir_main

:loopstart
set dirname=subdir%counter%
md %dirname%
echo %dirname%

dir /b | findstr /v /i "subdir*"> %temp%\temp.txt && for /l %%l in (1,1,%filesperfolder%) do @for /f "tokens=1,2* delims=:" %%a in ('findstr /n /r "^" %temp%\temp.txt ^| findstr /r "^%%l:"') do @move %%b %dirname%\%%b >nul

set /a counter=%counter%+1
for /f "tokens=*" %%a in ('type %temp%\temp.txt ^| find /c /v ""') do set _filesmoved=%%a
del %temp%\temp.txt
IF %_filesmoved% LSS 50 goto done

goto loopstart

:done
cls
echo All files were moved!!
pause
exit

我不喜歡您找到的腳本,因為它很難閱讀並使用臨時文件來跟蹤文件列表。 (另外,它顯然不起作用,所以就是這樣。)

@echo off
SET /a cnt=50
SET /a fnum=0

FOR /F "delims=" %%f IN ('dir /b /a-d *.csv') DO (
    CALL :moveFile "%%f"
)

GOTO :end

:moveFile
    IF "%cnt%" equ "50" CALL :makeDir

    move "%~1" "%fnum%\%~1"
    SET /a cnt+=1

    GOTO :EOF

:makeDir
    SET /a fnum+=1
    mkdir %fnum%
    SET /a cnt=0

    GOTO :EOF

:end

這是另一種方法。 我們測試目錄下是否還有文件,如果有,新建一個目錄,復制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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM