【问题标题】:Is there a command that can be moved to a folder by file name in Windows?Windows中是否有可以通过文件名移动到文件夹的命令?
【发布时间】:2020-09-28 07:07:18
【问题描述】:

我想用命令读取文件名,自动移动到同名文件夹。我该怎么办?

示例:

处理前

处理后

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

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

【问题讨论】:

  • .bat 不太适合模式匹配,可能是 powershell 或者 node.js 或 python 甚至 php 之类的脚本
  • 谢谢。powershell的使用方法有哪些?
  • My answer here 可以轻松实现这一目标。

标签: windows file batch-file cmd


【解决方案1】:

我将为这个确切的问题提供一个解决方案,以及我建议处理这种情况的替代方案。

==========
~解决方案~
==========

  • 将以下代码复制/粘贴到一个空文件中,保存并执行。
@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/

【讨论】:

  • 谢谢。我想要它的结果。我可以再问你一个问题吗?如果没有与文件匹配的文件夹,能否自动创建文件夹并移动文件?
【解决方案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
::----------------------------------------------------------------------------------------

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    相关资源
    最近更新 更多