![](/img/trans.png)
[英]How to create folder name without extension of file type using batch script and move in created sub directory?
[英]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
文件。
請注意, md
和move
命令只是出於測試目的而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.