标题: [文件操作] [已解决]批处理怎样批量移动文件? [打印本页]
作者: lxh623 时间: 2011-11-1 23:06 标题: [已解决]批处理怎样批量移动文件?
本帖最后由 lxh623 于 2011-11-14 21:10 编辑
我的E盘有个文件夹JP-XIN,下面有很多pdf和txt文件。提取名称到文本a。
E盘根目录有两个文件“文件夹名称1.txt”(一个英文单词),“文件夹名称2.txt”(二个英文单词),包括我的一些文件夹的名字,一行一个文件夹名。反正在E盘,应该可以不包括路径吧?!
第一个批处理、只要JP-XIN的文件名称含有“文件夹名称1.txt”的“一个英文单词”,就移动文件到该文件夹。(用“文件夹名称1.txt”的每一行去搜索文本a。)
第二个批处理、只要JP-XIN的文件名称含有“文件夹名称2.txt”的“两个英文单词”(无顺序和间隔的要求),就移动文件到该文件夹。(用“文件夹名称2.txt”的每一行的两个单词去搜索文本a。)
谢谢您的帮助!
文件夹名称1.txt:(部分)
defoam
spandex
文件夹名称2.txt:(部分)
flame polycarbonate
Die attach
epoxy resin
文件名:
TW200743656--flame retardant halogen-free polycarbonate compositions with high reflectance
US6699929-=die attach adhesives with vinyl ether and carbamate or urea functionality
作者: awk 时间: 2011-11-1 23:26
没明白,举个例子把。
作者: 小胖狐狸 时间: 2011-11-2 16:11
呵呵,如果只是临时处理一下,很容易解决
直接用Windows系统的搜索功能就可以,搜索、全选、剪切、粘贴
即使是必须同时包含两个单词,只需要在粘贴后,再次重复上一步即可
当然,如果是为了研究批处理的话,这是个不错的课题 :)
可以参考置顶帖
[系列教程]批处理for语句从入门到精通[20101225更新]
http://www.bathome.net/thread-2189-1-1.html
使用其中的 for /f
作者: weichenxiehou 时间: 2011-11-2 22:03
回复 1# lxh623
到底是“移动”还是“拷贝”?理解没错的话应该是“拷贝”吧,就拿第一个批处理来说,一个文件名中可能含有多个文件夹的名称,如果是移动的话,到底移动到哪个文件夹呢?
作者: lxh623 时间: 2011-11-2 23:00
回复 lxh623
到底是“移动”还是“拷贝”?理解没错的话应该是“拷贝”吧,就拿第一个批处理来说,一个文 ...
weichenxiehou 发表于 2011-11-2 22:03
谢谢!
是“移动”。
移动的话,后面的就不考虑了。
作者: awk 时间: 2011-11-2 23:41
文件夹defoam是在E:\下面,还是在E:\JP-XIN\下面?
作者: lxh623 时间: 2011-11-3 00:08
本帖最后由 lxh623 于 2011-11-3 17:43 编辑
文件夹defoam是在E:\下面,还是在E:\JP-XIN\下面?
awk 发表于 2011-11-2 23:41
谢谢您!
文件夹defoam是在E:\下面。
一般是第三级、四级、五级目录。
或者可以“文件夹名称1.txt”以及“文件夹名称2.txt”里面带路径。(用最后一个“\”后面的字符搜索文本a。)
或者列出E盘所有文件夹路径tmp.txt。用“文件夹名称1.txt”以及“文件夹名称2.txt”的每一行去提取,得到文本c(过渡一下)。
作者: lxh623 时间: 2011-11-5 23:04
我自己学习一晚上,得到代码,不正确。请高手指正修改:- @echo off
- for /f "delims= tokens=1" %%i in (文件夹名称2.txt)
- for /f "delims= tokens=2" %%j in (文件夹名称2.txt) do
- (
- for /f "delims=*" %%k in ('dir /s/b/a-d E:\JP-XIN\*.pdf E:\JP-XIN\*.txt ^| findstr /i "%%i"^|findstr /i "%%j"')
- (for /f "delims=" %%l in ('dir /s/b/a:d-h E:\ ^|findstr /i "%%i"^|findstr /i "%%j"'>nul') do (
- if not "%%l"=="" move "%%k" "%%~dpl" >nul 2>nul
- )))
- pause
复制代码
作者: lxh623 时间: 2011-11-8 07:17
本帖最后由 lxh623 于 2011-11-9 23:51 编辑
担心第一句是错的。第一个do前面是错的。
下面这样子也有问题,为什么?空格作为分隔符,怎样表示?用“*”,可以吗?
没有明确出现"%%j",先出现“%%k”,合适吗?
%%k得到是带有路径的文件名,对不对?- @echo off
-
- for /f "delims= tokens=1,2" %%i in (b2.txt) do (
- for /f "delims=" %%k in ('dir /s/b/a-d E:\JP-WKA\*.pdf E:\JP-WKA\*.txt ^| findstr /i "%%i"^|findstr /i "%%j"') do (
- for /f "delims=" %%l in ('dir /s/b/a:d-h E:\ ^| findstr /i "%%i"^|findstr /i "%%j" 2^>nul') do (
- if not "%%l"=="" move "%%k" "%%~dpl" >nul 2>nul
- )))
- pause
复制代码
开始部分可不可以这样:(它后面又能用什么连接词,连接到“ for /f "delims=" %%k in ('dir /s/b/a-d E:\JP-WKA\*”?)- for /f "delims= tokens=1,2" %%i in (b2.txt) do (echo %%i %%j
复制代码
作者: lxh623 时间: 2011-11-11 14:54
怎样把下面两个复合到一起?怎样使得后面的代码能够用到"%%i"、“%%j”?
谢谢!- @echo off
- for /f "usebackq tokens=1,2 delims= " %%i in ("文件夹名称2.txt")
- do(echo %%i %%j)
复制代码
- for /f "delims=" %%k in ('dir /s/b/a-d E:\JP-WKA\*.pdf E:\JP-WKA\*.txt ^| findstr /i "%%i"^|findstr /i "%%j"') do (
- for /f "delims=" %%l in ('dir /s/b/a:d-h E:\ ^| findstr /i "%%i"^|findstr /i "%%j" 2^>nul') do (
- if not "%%l"=="" move "%%k" "%%~dpl" >nul 2>nul
- ))
- pause
复制代码
作者: lxh623 时间: 2011-11-11 21:01
为什么想要这么个批处理?
因为下载了文献题录,每年更新部分就有上万条。我想,先建立了空白txt,然后,自动整理,就可以节约大量时间。
作者: CrLf 时间: 2011-11-11 22:25
不太明白,举个例子,比如有个文件叫作 batch.pdf,是可以与 bat 这个关键词匹配呢?还是只能按 batch 这个完整的单词来看呢?
作者: lxh623 时间: 2011-11-11 23:40
不太明白,举个例子,比如有个文件叫作 batch.pdf,是可以与 bat 这个关键词匹配呢?还是只能按 batch 这个 ...
CrLf 发表于 2011-11-11 22:25
拜托大侠!
我想事先的文件夹名称会考虑周到一点。
我想的是,只要含有,就移动。不考虑精确匹配。比如,batchly,batchlise都移动到batch。
作者: CrLf 时间: 2011-11-12 00:33
- @echo off&setlocal enabledelayedexpansion
- cd e:\JP-XIN
- for /f %%a in (e:\文件夹名称1.txt) do if exist *%%a*.* md %%a&move *%%a*.* %%a\
- for /f "tokens=1,2" %%a in (e:\文件夹名称2.txt) do (
- for %%c in (*%%a*.*) do (
- set filename=%%c
- if "!filename:%%b=!" neq "!filename!" md "%%a %%b"&move "%%c" "%%a %%b\"
- )
- )
复制代码
作者: lxh623 时间: 2011-11-12 13:14
本帖最后由 lxh623 于 2011-11-12 22:14 编辑
CrLf 发表于 2011-11-12 00:33
谢谢您!
怎么在原文件夹建立文件夹,而且移动到那里。
我想的是,E盘有这么个文件夹,移动到那里。
查找文件:
for /f "delims=" %%k in ('dir /s/b/a-d E:\JP-WKA\*.pdf E:\JP-WKA\*.txt ^| findstr /i "%%i"^|findstr /i "%%j"')
查找目录:
for /f "delims=" %%l in ('dir /s/b/a:d-h E:\ ^| findstr /i "%%i"^|findstr /i "%%j" 2^>nul')
我按照您的,做成下面这样子,不运行:- @echo off&setlocal enabledelayedexpansion
- cd e:\JP-WKA
- for /f "tokens=1,2" %%a in (e:\文件夹名称2.txt) do (
- for %%c in (*%%a*.*) do (
- set filename=%%c
- if "!filename:%%b=!" neq "!filename!" do (
- for /f "delims=" %%l in ('dir /s/b/a:d-h E:\ ^| findstr /i "%%a"^|findstr /i "%%b" 2^>nul') & move "%%c" "%%~dpl" >nul 2>nul
- )))
- pause
复制代码
作者: lxh623 时间: 2011-11-13 23:52
本帖最后由 lxh623 于 2011-11-13 23:55 编辑
CrLf 发表于 2011-11-12 00:33
学习了延迟变量,修改了我自己那个。可以移动,但是移动到该文件夹的母文件夹。不知道哪里有问题?麻烦帮我看看。
另外,“!filename:%%b=!” 这段是什么含意,在哪里查得到,哪本书上?
谢谢您们!- @echo off
- setlocal ENABLEDELAYEDEXPANSION
- for /f "tokens=1,2 delims= " %%i in (文件夹名称2.txt) do (
- set var1=%%i & set var2=%%j
- for /f "delims=" %%k in ('dir /s/b/a-d E:\JP-WKA\*.pdf E:\JP-WKA\*.txt ^| findstr /i "!var1!"^|findstr /i "!var2!"') do (
- for /f "delims=" %%l in ('dir /s/b/a:d-h E:\ ^| findstr /i "!var1!"^|findstr /i "!var2!" 2^>nul') do (
- if not "%%l"=="" move "%%k" "%%~dpl" >nul 2>nul
- )))
- pause
复制代码
作者: lxh623 时间: 2011-11-14 16:20
本帖最后由 lxh623 于 2011-11-14 16:22 编辑
回复 16# lxh623
上面这个,我换成"%%~fsl",基本解决了,尽管不知道道理。
又想到我的文本象下面,怎样把每一行当成一个单词去搜索。
首先,怎样echo含有空格的每一行。
谢谢您!
文件夹名称1.txt:(示例)
antenna
liq crystal
liquid crystal
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |