我已设法复制并操作执行以下操作的批处理脚本:
将文件移动到文件夹
@echo off & setlocal EnableDelayedExpansion
echo.
pushd "%~dp0"
for %%j in (*.csv) do (
set file=%%~nj
set folder=!file:~-4!
if !folder!==FI_2 set folder=!file:~-6!
if not exist !folder! md !folder!
move "%%~j" "!folder!"
echo "%%~j" -^> "!folder!"
)
popd
echo.& echo.Done
:: End_Of_Batch
我遇到的问题是我需要按月对文件进行分组。文件名如下所示:
BS_IDX_LEVEL_YYYYMMDD_BAFI.csv
(显然YYYYMMDD将替换为文件的日期)
因此任何名称为BS_IDX_LEVEL_20111231_BAFI.csv的文件都会进入名为“1112”的文件夹(文件夹的日期格式为YYMM) 名为BS_IDX_LEVEL_20111115_BAFI.csv的文件将进入文件夹名称“1111”
有没有我可以改变这个脚本,以便在按文件名组织文件之前先按日期对它们进行分组?
如果我能进一步解释,请告诉我
答案 0 :(得分:0)
当您循环并获取文件名的最后4个字符时,您还可以查看日期。我不知道文件的开头是修复还是可以修改,但我认为假设date_end语法是一致的是合理的。
set filedate=!file:~-9,-7!
这将从!file!
中存储的字符串末尾提取第9和第7之间的字符。使用您的语法,将是两位数的月份数。这也可以避免与2或4位数日期混淆。
一旦你拥有了这个和另一个文件夹名称,就可以一次创建两个文件夹并将文件直接放入子文件夹中,这样你仍然只需要对文件集进行一次传递。
@echo off & setlocal EnableDelayedExpansion
echo.
pushd "%~dp0"
for %%j in (*.csv) do (
set file=%%~nj
set folder=!file:~-4!
if !folder!==FI_2 set folder=!file:~-6!
set filedate=!file:~-9,-7!
SET datefolder=!folder!\!filedate!
if not exist !folder! md !folder!
if not exist !folder!\!filedate! md !folder!\!filedate!
move "%%~j" "!datefolder!"
echo "%%~j" -^> "!datefolder!"
)
popd
echo.& echo.Done
:: End_Of_Batch