Windows中是否可以通过文件名将命令移动到文件夹?

时间:2020-06-09 07:09:34

标签: windows file batch-file cmd

我想使用命令读取文件名,然后自动将其移动到具有相同名称的文件夹中。我该怎么办?

示例:

处理前

Promises and async/await

处理后

enter image description here

如果我有相同名称的文件和文件夹,我想将它们移动到具有相同名称的文件夹中。

我该怎么办?我有cmd命令吗?

2 个答案:

答案 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\"
  )
)
  • 您可以将“ * .xlsx”更改为任何其他文件扩展名,或更改为“ *。*”以使用任何文件扩展名。
  • 请记住,这仅适用于格式与您在问题中提到的方式一样的文件名。

==================
〜替代解决方案〜
==================

我建议使用Shell扩展“文件2文件夹”作为替代。我遇到了一种情况,我需要一些与几年前要求的类似的东西,并且最终效果很好。

https://www.dcmembers.com/skwire/download/files-2-folder/

screenshot

答案 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
::----------------------------------------------------------------------------------------