将文件从一个目录移动到另一个目录并将它们放在基于文件名的文件夹中

问题描述:

我需要根据文件名将文件从一个目录移动到另一个目录,同时将文件放入子目录中。将文件从一个目录移动到另一个目录并将它们放在基于文件名的文件夹中

背景:

文件名(建筑Number)-assign-FLR-pln.dgn

新的位置将是F:/分配楼层平面图/建筑/(号楼)/平面图文件。

下的批处理文件需要读取.dgn名字为建筑物编号,然后将文件放在相应的楼层平面图的子文件夹中的楼号文件

所以......

取(楼号)-assign-FLR-pln.dgn从一个目录文件,并将其放置.....

分配楼层平面图 - 建筑 - (房号) - 地板计划文件< - 这里

+0

是否必须批量写入?您的系统是否安装了任何脚本语言,如python,php,或者您的系统是否安装了Windows 10 bash shell?批处理是写一些东西的一种可怕的方式,它的编写/调试令人困惑,并且没有多大意义。你机器上有C#编译器吗?几乎任何解决方案都比基于批处理的解决方案更好。 – HumbleWebDev

+1

建筑号码是否总是在括号内?你打算给“(楼号)”命名目录吗?还包括括号?此外,您应该知道,在不显示代码的情况下询问代码问题不在此处,请[编辑](https://*.com/posts/45942579/edit)您的帖子以包含您遇到问题的代码与,解释到底是什么麻烦与它。 – Compo

+0

对不起,我是*的新手,我没有我要求别人帮我的代码。然而,对于你的问题,paren只是一个占位符。邪恶的程序员 - 使用工作机器我们只使用CMD。所以文件名100-assig-flr-plan.dgn需要进入100文件夹的平面图子文件夹。 –

如果你想直接从批处理文件中完成一些复杂的工作,那么你有一点点要学习。

研究名单:

FOR 
SET 
CALL 

你要使用FOR命令来获取文件名;请注意0​​选项。例如:

set BAT_DGNFNM= 
for %%F in (*.dgn) do set BAT_DGNFNM=%%~nF 

这会导致将环境变量BAT_DGNFNM设置为基本文件名。然而,它遍历所有的文件,所以真的,你需要它来调用一个子程序为每个文件:

for %%F in (*.dgn) do call :DODGN "%%~dpnxF" "%%~nF" 

这调用子程序:DODGN,并将它传递两个引号封装的参数;第一个是完全合格的文件名,第二个是基本文件名。

然后你做实际的文件中的子程序处理:

:DODGN 
set BAT_DGNFNM=%1 
set BAT_DGNBNM=%2 
REM Do stuff with BAT_DGNBNM using SET commands 
GOTO :EOF 

你需要确保你没有“贯穿”主循环后的子程序完成,你应该当你完成后清理你的环境变量,所以这看起来像这样:

@echo off 
for %%F in (*.dgn) do call :DODGN "%%~dpnxF" "%%~nF" 
goto ENDIT 

:DODGN 
set BAT_DGNFNM=%1 
set BAT_DGNBNM=%2 
REM Do stuff with BAT_DGNBNM using SET commands 
GOTO :EOF 

:ENDIT 
set BAT_DGNFNM= 
set BAT_DGNBNM= 

祝你好运 - 这东西可以变得复杂。

最后提醒:大多数你的学习曲线将与SET命令 - 这就是你如何提取出子一个环境变量,并把它变成另一种,执行文本替换等

这东西是这样在VBS或PowerShell中更容易。

虽然您没有显示任何代码,但我们可以帮助您......

这是很容易,如果你知道的命令来使用(对于初学者一个伟大的网站: SS64):

使用纯for循环得到每个文件。
使用for /f循环提取建筑物-NR(根据您的评论是用破折号分开的第一个标记)
使用md创建目标文件夹(如果已经存在的忽略错误)
使用copy复制文件。
完成。

@echo off 
REM prepare some files for testing: 
break>100-assign-flr-pln.dgn 
break>110-assign-flr-pln.dgn 
break>235-assign-flr-pln.dgn 

REM now copy them into their destination folders: 
set "dest=Assignment Floor Plans - Buildings - @ - Floor Plan Files" 
for %%f in (*-assign-flr-pln.dgn) do (
    for /f "tokens=1 delims=-" %%a in ("%%f") do (
    call md "%%dest:@=%%a%%" 2>nul 
    call copy "%%f" "%%dest:@=%%a%%\" 
) 
) 

REM now show the result: 
tree /f 

注:适应您的目的地(添加F:\

“特殊效果”:
call <command>:介绍解析的另一层,以避免delayed expansion
@=%%a字符串变量
2>nul抑制误差范围内更换消息