簡體   English   中英

如何將文件從另一個目錄移動到創建的按名稱創建的文件夾?

[英]How to move file from another directory to created folder that make by name file?

我已經根據文件名制作了用於制作新文件夾的腳本文件,並將 1 個文件移動到該文件夾。 代碼如下。

@ECHO OFF

setlocal EnableExtensions DisableDelayedExpansion

set "sourcedir=C:\Users\XXX\4_MapIdentifyAndCSV"
set "destdir=C:\Users\XXX\5_OldData"

for /F "eol=| delims=" %%A in ('dir /B /A-D-H "%SourceDir%\*.csv" 2^>nul') do (
    for /F "eol=| tokens=1 delims=." %%B in ("%%~nA") do (
        md "%DestDir%\%%B" 2>nul
        move /Y "%SourceDir%\%%A" "%DestDir%\%%B\"  
    )
)

endlocal

但我也想將另一個文件從另一個目錄移動到創建的文件夾。

示例:在 C:\Users\XXX\2_Video 將所有文件視頻移動到 crated 文件夾。

在 C:\Users\XXX\Sub_Folder 將所有 Sub_Folder 移動到 crated 文件夾。

並在 C:\Users\XXX\3_Txt 將所有文本文件移動到 crated 文件夾。

請支持我。

@ECHO OFF
setlocal EnableExtensions DisableDelayedExpansion

set "sourcedir=U:\Users\XXX"
set "destdir=U:\Users\XXX\5_OldData"

FOR %%s IN ("4_MapIdentifyAndCSV:.csv" "2_Video" "Sub_Folder" "3_Txt") DO FOR /f "tokens=1,* delims=:" %%t IN (%%s) DO (

for /F "delims=" %%A in ('dir /B /A-D-H "%SourceDir%\%%t\*%%u" 2^>nul') do (
    for /F "tokens=1 delims=." %%B in ("%%~nA") do (
        ECHO md "%DestDir%\%%B" 2>nul
        ECHO move /Y "%SourceDir%\%%t\%%A" "%DestDir%\%%B\"  
    )
)
)
GOTO :EOF

我使用U:進行測試。

eol=| 您的代碼中不需要,所以我刪除了它。

使用%%s .. %%u的額外“shell”是這樣工作的:

列表中帶引號的字符串分配給%%s 列表中的每個條目都是"subdirectoryname:filemask" :被選中是因為它不能出現在子目錄名稱或文件掩碼中。 for... delims=:...將子目錄名稱分配給%%t並將文件掩碼分配給%%u 如果未提供文件掩碼, %%u將為

從那里開始,只需將所需文件名和目錄的適當部分拼湊在一起,在文件掩碼前插入*以指定“全部”即可。

這樣,您可以根據需要控制移動的文件類型。 看起來您只需要一個目錄中的.csv文件和其他目錄中的所有文件。 如果需要,您還可以在列表中指定"4_MapIdentifyAndCSV:.csv" "4_MapIdentifyAndCSV:.xyz"以移動所有.csv和所有.xyz文件

請注意, mdmove命令只是出於測試目的而echo ed。 從每一行中刪除echo關鍵字以激活創建/移動。


我不確定我是否理解這些要求。

通過修改列表,使每個元素都

source_subdir:destination_subdir:filemask

我們可以實現

4_map...*.csv -> 5_olddata\文件名\文件名.csv
2_vid...* -> 5_olddata\dest...2_vid...*
sub_f...* -> 5_olddata\dest...sub_f...*
3_txt...* -> 5_olddata\dest...3_txt...*

當然,如果需要,實際的目標子目錄可以common - 所需要的只是第二個元素變為common

4_map 的.csv目標4_map...源是從 OP 的原始代碼派生的。

請注意, destination_subdir必須是單個空格,因為分隔符序列被處理為單個分隔符 ( : = :: = :::::::

@ECHO OFF
setlocal EnableExtensions DisableDelayedExpansion

set "sourcedir=U:\Users\XXX"
set "destdir=U:\Users\XXX\5_OldData"

FOR %%s IN ("4_MapIdentifyAndCSV: :.csv" "2_Video:dest_for_2_video" "Sub_Folder:dest_for_sub_folder" "3_Txt:dest_for_3_text") DO FOR /f "tokens=1,2,* delims=:" %%t IN (%%s) DO (

for /F "delims=" %%A in ('dir /B /A-D-H "%SourceDir%\%%t\*%%v" 2^>nul') do (
  IF "%%u"==" " (
    rem if second element of list item is "empty", destination is directory ...\filename
    for /F "tokens=1 delims=." %%B in ("%%~nA") do (
        ECHO md "%DestDir%\%%B" 2>nul
        ECHO move /Y "%SourceDir%\%%t\%%A" "%DestDir%\%%B\"  
    )
  ) ELSE (
    rem if second element of list item is not "empty" it is the destination directory ...\%%u
    ECHO md "%DestDir%\%%u" 2>nul
    ECHO move /Y "%SourceDir%\%%t\%%A" "%DestDir%\%%u\"  
  )
)
)

暫無
暫無

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

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