我想使用命令读取文件名,然后自动将其移动到具有相同名称的文件夹中。我该怎么办?
示例:
处理前
处理后
如果我有相同名称的文件和文件夹,我想将它们移动到具有相同名称的文件夹中。
我该怎么办?我有cmd命令吗?
答案 0 :(得分:4)
我将为这个确切的问题提供解决方案,并为解决这种情况建议另一种方案。
==========
〜解决方案〜
==========
@echo off
for /f "tokens=1,* delims=_" %%a in ('dir /b *.xlsx') do (
if not "%%a_%%b"=="%~nx0" (
if not exist %%a mkdir %%a
move "%%a_%%b" "%%a\"
)
)
==================
〜替代解决方案〜
==================
我建议使用Shell扩展“文件2文件夹”作为替代。我遇到了一种情况,我需要一些与几年前要求的类似的东西,并且最终效果很好。
答案 1 :(得分:2)
这是在带有批处理文件的vbscript中使用正则表达式的另一种方法:
@echo off & color 0A
Title Extract Title using Regex in vbscript
SetLocal EnableDelayedExpansion
@for /f "delims=" %%a in ('dir /b *.xlsx') do (
Call :Extract_Title "%%a" Title
If Defined Title (
If Not Exist "!Title!\" MkDir "!Title!\"
Move /-Y "%%a" "!Title!\"
)
)
Pause & Exit
::----------------------------------------------------------------------------------------
:Extract_Title <InputFile> <Title to be Set>
>"%tmp%\%~n0.vbs" (
echo WScript.StdOut.WriteLine Extract_Title(Data^)
echo Function Extract_Title(Data^)
echo Data = Wscript.Arguments(0^)
echo Set re = New RegExp
echo re.Global = True
echo re.IgnoreCase = True
echo re.Pattern = "(\S+|\S.+)_"
echo For Each Match in re.Execute(Data^)
echo Title = Match.SubMatches(0^)
echo Next
echo Extract_Title = Title
echo End Function
)
@for /f "delims=" %%A in ('cscript /nologo "%tmp%\%~n0.vbs" "%~1"') do set "%2=%%A"
If Exist "%tmp%\%~n0.vbs" Del "%tmp%\%~n0.vbs"
Exit /B
::----------------------------------------------------------------------------------------