gpt4 book ai didi

windows - 基于多个文件名批量创建多个文件夹,并将多个相关文件移动到创建的文件夹中

转载 作者:行者123 更新时间:2023-12-03 11:14:23 24 4
gpt4 key购买 nike

每个星期,我的一位同事不得不浏览一个文件夹,其中包含数百个的多路分解视频和音频文件,分别为特定的城市电视台重命名每个文件夹,然后根据城市名称将其分类到文件夹中。我已经创建了一个.bat文件来为他全部重命名,现在我想创建一个.bat文件,该文件根据文件名创建新目录,并将相应的文件放入新文件夹中。我复制了一些文件进行测试。

enter image description here

因此,最终结果将是每个城市的“休斯顿”文件夹及其所有对应文件,其文件的“康普顿”文件夹,“Moline”文件夹等,依此类推...每个城市,最多 200个城市,而且我们只会得到更多。

他目前正在搜索“休斯顿”,剪切出现的所有文件,手动创建一个新文件夹,将其命名为“休斯顿”,然后将所有文件粘贴到新文件夹中。对于每个城市。 200次。这需要几个小时。

这些文件始终使用以下系统命名:X ###随机城市,ST

以我很少的编程知识,我假设脚本可以检测到第一个空格之后的所有字符,并且在逗号之前复制这些字符(Random City),创建一个新文件夹,并将其命名为复制的字符(Random City)。 ),然后将文件名中包含“Random City”的所有文件移动到新创建的文件夹中。最终结果将是这样,只是有了更多的文件夹。

enter image description here

有谁能比我更好地解释达到此目的的最佳方法?

如果我在错误的位置或不够聪明,我会事先道歉。干杯!

更新:我四处乱逛,了解 token 和定界符,变量等。这是我的功能,它工作得非常好,只是我不确定如何在城市名称的末尾删除逗号。我使用空格作为定界符,如果我理解正确(包括逗号),则使用tokens = 2使得文本将标记分块。出现另一个问题。假设有一个城市有两个文本块( token ),例如。圣弗朗西斯科,巴吞鲁日。我如何使用逗号作为停顿点来捕获他们两个?我的代码如下。

@echo off
setlocal enabledelayedexpansion
for %%A in (*.m2v *.mpa) do (
echo file found %%A
for /f "delims=" %%B in ("%%A") do set fname=%%~nB
for /f "delims=" %%C in ("%%A") do set fextn=%%~xC
for /f "tokens=2* delims= " %%D in ("!fname!") do set folname=%%D
echo folder name !folname!
if not exist "!folname!" (
echo Folder !folname! doesn't exist, creating
md "!folname!"
) else (
echo Folder !folname! exists
)
echo Moving file %%A to folder !folname!
move "%%A" "!folname!"
)
echo Finished

pause


更新2:我发现了一种解决方法,可以通过添加逗号作为分隔符来消除逗号,但我仍在设法将自己的头围在2个单词的城市周围。我的Baton Rouge和San Fransisco文件夹分别被命名为“Baton”和“San”。到目前为止,这是我的代码,如果找到更好的方法,我将进行更新。
setlocal enabledelayedexpansion
for %%A in (*.m2v *.mpa) do (
echo file found %%A
for /f "delims=" %%B in ("%%A") do set fname=%%~nB
for /f "delims=" %%C in ("%%A") do set fextn=%%~xC
for /f "delims=," %%B in ("%%A") do set fname=%%~nB
for /f "tokens=2* delims= " %%D in ("!fname!") do set folname=%%D
echo folder name !folname!
if not exist "!folname!" (
echo Folder !folname! doesn't exist, creating
md "!folname!"
) else (
echo Folder !folname! exists
)
echo Moving file %%A to folder !folname!
move "%%A" "!folname!"
)
echo Finished

pause


更新3

这是我的代码。但是,如果文件名前缀/后缀中的字符数发生变化,则会使事情搞砸,因此您必须编辑代码。
@ECHO OFF
SETLOCAL enabledelayedexpansion
FOR %%A in (*.m2v *.mpa) do (
ECHO file found %%A
FOR /F "delims=" %%B in ("%%A") do set fname=%%~nB
SET folname=!fname:~5,-4!
ECHO folder name !folname!
if not exist "!folname!" (
ECHO Folder !folname! doesn't exist, creating
MD "!folname!"
) else (
ECHO Folder !folname! exists
)
ECHO Moving file %%A to folder !folname!
MOVE "%%A" "!folname!"
)
ECHO Finished

PAUSE


使用 SET folname=!fname:~5,-4!允许我修剪M373前缀(5个字符)和TX后缀(4个字符),删除逗号并保存城市名称,无论它长短或有多少个单词(例如。西棕榈滩,佛罗里达州)。 Antares在他的回答中提到了这种解决方案,效果非常好。

但也让我觉得

如果前缀中的字符数可能发生变化,那么我要么必须每次都编辑批处理文件,要么针对每种情况创建一个特定的批处理文件。不可怕,但也不是很好。因此,我接受了迈克尔·希思(Michael Heath)的回答,该回答无懈可击。我还不够聪明,还不知道确切的原因,但是我将对其进行剖析并找出答案。我有很多学习要做。谢谢大家!
Before
After

最佳答案

@echo off
setlocal

rem A=Fullpath, B=Name before comma, C=B prefix, D=B without prefix.
for /f "delims=" %%A in ('dir /b *.m2v *.mpa') do (
for /f "delims=," %%B in ("%%~nA") do (
for /f "tokens=1,*" %%C in ("%%~B") do (

if not exist "%%~D\" (
echo Folder "%%~D" doesn't exist, creating
md "%%~D"
)

if exist "%%~D\" (
echo Moving file "%%~A" to folder "%%~D\"
move /y "%%~A" "%%~D\"
) else echo Folder "%%~D\" doesn't exist
)
)
)

echo Finished
pause

3个 for循环以获取所需的 token 。
  • 1st将获得完整路径。
  • 2nd以逗号开头获取名称。
  • 3rd获取不带前缀的名称。

  • 在嵌套的 for循环中,检查文件夹是否存在,如果不存在则创建它。然后,如果存在文件夹,则将文件移入其中。

    关于windows - 基于多个文件名批量创建多个文件夹,并将多个相关文件移动到创建的文件夹中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61535228/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com