我正在寻找一种解决方案,它将帮助我将文件移动到名称相似的文件夹中。
我有TEST1_2018P2.xlsx
,TEST2_2018P2.xslx
等文件名。
我有名为TEST1_City1
,TEST2 City2
...
我需要将文件TEST1_2018P2.xlsx
移至文件夹TEST1_City1
,将TEST2_2018P2.xslx
移至TEST2 City2
,依此类推。
我该怎么做?
这是我最新的代码,该代码也不起作用。
@ECHO OFF
SETLOCAL
SET "sourcedir=my_folder"
SET "destdir=my_folder"
FOR /f "delims=" %%a IN ( 'dir /b /a-d "%sourcedir%\*.xlsx" ' ) DO (
FOR /f "tokens=1delims=" %%b IN ("%%a") DO (
FOR /f "delims=" %%d IN ( 'dir /b /ad "%destdir%\*%%b*" ' ) DO (
ECHO(MOVE "%%a" "%destdir%\%%d\"
)
)
)
GOTO :EOF
答案 0 :(得分:1)
我不确定您要执行的任务是什么,因此,这个相对简单的示例应将任何.xlsx
文件移至名称与文件名部分匹配的第一个现有目录,直到下划线,再加上一个空格。 / p>
调整行2
和3
上的值以匹配您的实际目录规范(不带反斜杠)。
@Echo Off
Set "SourceDir=my_folder"
Set "DestDir=my_folder"
For /F Delims^=^ EOL^= %%A In ('Dir /B/A-D-L "%SourceDir%\*_*.xlsx" 2^>Nul'
) Do Call :Sub "%%A"
GoTo :EOF
:Sub
Set "DirName=%~1"
Set "DirName=%DirName:_="&:"%"
For /F Delims^=^ EOL^= %%A In ('Dir /B/AD-L "%DestDir%\%DirName% *" 2^>Nul'
) Do If Exist "%~1" Move /Y "%~1" "%%A" 2>Nul
Exit /B
它并非设计为执行任务的最有效方法!
答案 1 :(得分:0)
假定TEST1
的实际文本不包含任何_
字符,则可以使用:
@echo off
setlocal EnableDelayedExpansion
cd /d "your_folder"
for /F "delims= eol=" %%A IN ('dir /B /A-D "TEST*_2018P2.xlsx"') do (
for /F "tokens=1 delims=_" %%B IN ("%%A") do (
rem Define some important variables:
set "token_1=%%B"
set "num_test=!token_1:~-1!"
set "foldername=!token_1!_City!num_test!"
md "!foldername!\" >nul 2>&1
move "%%~fA" "!foldername!\"
)
)
让我解释一下我的代码:
for /F
循环用于查找所需的所有文件(TEST*_2018P2.xlsx
),不包括所有目录(/A-D
)和标头。使用delims=
和eol=
选项:遍历整行,而不会跳过以;
开头的行。for /F
循环用于获取第一个循环(IN ("%%A")
)的输出的第一个标记。
token_1
变量,然后减去它的最后一个数字/字母,将其设置为num_test
变量。token_1
变量(TESTn
),_City
和n
(数字)设置的。nul
。碰巧没有太多处理过的if exist
语句。当前文件(%%~fA
;完整路径)已移至该文件夹。请记住将"your_folder"
替换为您的实际文件夹!