Board logo

标题: [文本处理] 批处理怎样按文件名奇偶数移动文件到指定文件夹? [打印本页]

作者: yingtianchang    时间: 2018-7-21 19:18     标题: 批处理怎样按文件名奇偶数移动文件到指定文件夹?

某个文件夹下有几千个文本文件,编号都是数字,没有规律,只能区分奇偶数,能不能根据文件名的奇偶数移动到两个文件夹,比如说名称为奇数的文件移动到1文件夹,偶数的移动到2文件夹。各位大神帮帮忙,谢谢啦
作者: WHY    时间: 2018-7-21 20:08

for %%i in (0 2 4 6 8) do move *%%i.txt 2\
作者: xxpinqz    时间: 2018-7-22 02:00

楼上,move用法错了,会导致灾难。。。
作者: codegay    时间: 2018-7-22 13:32

本帖最后由 codegay 于 2018-7-22 15:23 编辑

nim语言版,有点蛋疼。
  1. import os
  2. import strutils
  3. import re
  4. var dir = getAppDir()
  5. var dest1 = dir / "../1/"
  6. var dest2 = dir / "../2/"
  7. proc 单(name: string): bool = (name.parseInt and 1) == 1
  8. proc 双(name: string): bool = not 单 name
  9. for f in walkDirRec(dir):
  10.     var (dir, name, ext) = splitFile(f)
  11.     var txtname = name & ext
  12.     if ext.toLower == ".txt" and match(name, re"\b\d+\b"):
  13.         if 单(name):
  14.             moveFile(f, dest1 / txtname)
  15.             echo f,"    ===>>   ", dest1
  16.         else:
  17.             moveFile(f, dest2 / txtname)
  18.             echo f,"    ===>>   ", dest2
复制代码

作者: WHY    时间: 2018-7-23 16:17

本帖最后由 WHY 于 2018-7-23 19:11 编辑
楼上,move用法错了,会导致灾难。。。
xxpinqz 发表于 2018-7-22 02:00



    ??
可能会出现的问题是,当文件名由 8 位以上数字组成时,文件被移动到错误的文件夹。这个不属于灾难,把文件移回原来的地方就行。
参考 http://www.bathome.net/viewthrea ... mp;page=1#pid175462

好吧,保险的办法:
  1. @echo off
  2. md 1\ 2\ 2>nul
  3. for /f "delims=" %%i in ('dir /b /a-d *.txt ^| findstr /i "^[0-9]*[13579]\.txt$"') do move %%i 1\
  4. for /f "delims=" %%i in ('dir /b /a-d *.txt ^| findstr /i "^[0-9]*[02468]\.txt$"') do move %%i 2\
  5. pause
复制代码

作者: Batcher    时间: 2018-7-23 16:31

回复 5# WHY


    第3行有个笔误,echo需要改成move
作者: WHY    时间: 2018-7-23 19:14

回复 6# Batcher


    感谢指正。
作者: xxpinqz    时间: 2018-7-23 19:20

本帖最后由 xxpinqz 于 2018-7-23 19:24 编辑

回复 5# WHY


唉,我记得有个3楼的代码“move %%a 1”,不见了。
不是说你•。。。。




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