Board logo

标题: [文件操作] [已解决]批处理如何将多个文件夹移动到以该文件夹名开头非中文字符串命名的文件夹里 [打印本页]

作者: kaze    时间: 2016-10-27 15:39     标题: [已解决]批处理如何将多个文件夹移动到以该文件夹名开头非中文字符串命名的文件夹里

本帖最后由 kaze 于 2016-10-27 19:13 编辑

批处理如何将多个文件夹移动到以该文件夹名开头部分非中文字符串命名的文件夹里
批处理以英文中文作为分隔符整理图片文件夹:

大家好,当前目录现有一堆图片文件夹,
BU love图片(计80.5 )
BU X10 花式图片(共8)
BK-e5 图样 PIC(9.5)
RD pic3(5.0) 图片(共90)原图
WT W100图片(计9)原图

如何以前面的英文(或数字或空格)创建文件夹,移动当前目录子目录到相应的编码文件夹
BU love
BU X10
BK-e5
RD pic3(5.0)
WT W100
(编码以-分隔符)


举例脚本(只能有两个空格,三个以上出错,英文中文没有进行分隔)
  1. @echo off
  2. pause
  3. for /f "tokens=1-3 delims= " %%a in ('dir /b/ad ') do (
  4. echo %%a %%b %%c
  5. if not exist "%%a-%%b" md "%%a-%%b"
  6. move /Y "%%a %%b %%c" "%%a-%%b"
  7. )
  8. pause
复制代码

作者: DiamondbacK    时间: 2016-10-27 16:39

本帖最后由 DiamondbacK 于 2016-10-27 17:05 编辑
  1. $ dir /b /ad | PowerShell -c "$input | ForEach { move $_ (md ($_ -replace ' *[^ -~].*', '' -replace ' +', '-')) }"
复制代码
  1. $ PowerShell -c "ls | ? { $_.PSIsContainer } | ForEach { move $_ (md ($_ -replace ' *[^ -~].*', '' -replace ' +', '-')) }"
复制代码

作者: kaze    时间: 2016-10-27 17:23

回复 2# DiamondbacK
你好,之前的代码是可以运行的,就是移动到同一个文件夹时有一长串错误提示,不知道为什么修改版运行出错了
  1. PowerShell -c "ls | ? { $_.PSIsContainer } | ForEach { md ($NewName = $_.Name -replace ' *[^ -~].*', '' -replace ' +', '-'); move $_ $NewName }"
复制代码

作者: DiamondbacK    时间: 2016-10-27 17:31

本帖最后由 DiamondbacK 于 2016-10-27 17:34 编辑

回复 3# kaze

「移动到同一个文件夹」是什么意思?
当前文件夹下除了这些要移动的子文件夹还有什么?请介绍清楚。
作者: kaze    时间: 2016-10-27 17:52

回复 4# DiamondbacK
仅移动当前脚本所在目录的一级子目录,移动到当前目录创建的编号(文件夹名开头部分非中文字符串命名)文件夹里面
作者: DiamondbacK    时间: 2016-10-27 18:44

回复 5# kaze


我只能猜测「移动到同一个文件夹」的意思是,子目录的非中文前缀有重复的。
如果是这样,报错内容应该是试图建立已存在文件夹,就用原来的命令,忽略错误就可以了,不影响效果。

这样应该可以不报错:
  1. PowerShell -c "ls | ? { $_.PSIsContainer } | ForEach { if (-Not (Test-Path ($NewName = $_.Name -replace ' *[^ -~].*', '' -replace ' +', '-'))) { md $NewName }; move $_ $NewName }"
复制代码

作者: kaze    时间: 2016-10-27 19:09

^_^谢谢




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2