标题: [文件操作] [已解决]移动文件的批处理有什么问题? [打印本页]
作者: lxh623 时间: 2011-11-23 23:30 标题: [已解决]移动文件的批处理有什么问题?
本帖最后由 lxh623 于 2011-11-29 15:44 编辑
我自己做了批处理,用了几天,今天发现有问题。
批处理在这里,http://www.bathome.net/thread-14568-2-1.html
http://www.bathome.net/thread-14686-1-1.html
路径:
E:\涂料-防腐蚀\corrosion proof
E:\涂料-防腐蚀\▲防锈\rust proof
E:\涂料-防水剂\water-proof
E:\涂料-防水剂\waterproof
E:\涂料-防水剂\B防雾\fog-proof
E:\涂料-防水剂\H皮革\leather water proof
E:\涂料-防水剂\G玻璃\waterproof glass
E:\涂料-防水剂\E混凝土\water proof concrete,mortar,cement
E:\涂料-防水剂\H织物\water proof fabric,textile
E:\涂料-防水剂\H织物\water proof fibre,fiber,fibrous
E:\涂料-防水剂\E石膏\water proof gypsum,plaster
E:\涂料-防水剂\F陶瓷\ceramic water proof
文件夹名称1:
fog-proof
waterproof
water-proof
我设想按照“文件夹名称1.txt”每行内容,精确移动到相应文件夹。但是,怎么把下面这些文件移动到了“E:\涂料-防腐蚀\corrosion proof”?
AU9941499-=aqueous silane emulsion for damp-roofing building materials-RP
AU2009251100-=weather-proof sealing arrangement for use in switching cabinet- @echo off
- setlocal ENABLEDELAYEDEXPANSION
- for /f "delims=" %%a in (文件夹名称1.txt) do (
- set VAR=%%a
- for /f "delims=" %%k in ('dir /s/b/a-d E:\JP-XIN\*.pdf E:\JP-XIN\*.txt ^| findstr /i /c:"!VAR!"') do (
- for /f "delims=" %%l in ('dir /s/b/a:d-h E:\ ^| findstr /i /c:"!VAR!"') do (
- if not "%%l"=="" move "%%k" "%%~fsl"
- )))
- pause
复制代码
感谢您的帮助!
作者: awk 时间: 2011-11-23 23:51
AU9941499-=aqueous silane emulsion for damp-roofing building materials-RP
AU2009251100-=weather-proof sealing arrangement for use in switching cabinet
是因为这些特殊字符串吧
作者: lxh623 时间: 2011-11-24 07:46
本帖最后由 lxh623 于 2011-11-24 09:50 编辑
回复 2# awk
“文件夹名称1”是每行一个到三个英文单词,单词间是空格或者“-”。像这种,我想首先提取每一行作为搜索字串。
用下面的代码试验,结果正常。但是,移动文件还是不行。
问题在于,proof不是一行,应该提取搜索词出现故障。
参考:http://www.bathome.net/viewthread.php?tid=4274- @echo off
- for /f "delims=*" %%a in (文件夹名称1.txt) do (
- echo %%a>>b.txt)
- pause
复制代码
作者: lxh623 时间: 2011-11-24 21:55
诸位大虾,我真的着急死了!
感谢!
作者: awk 时间: 2011-11-24 23:23
回复 3# lxh623
proof不是一行,这是什么意思?
作者: lxh623 时间: 2011-11-25 07:25
回复 lxh623
proof不是一行,这是什么意思?
awk 发表于 2011-11-24 23:23
文件夹名称1:
fog-proof
waterproof
water-proof
作者: yyykkkyyyy 时间: 2011-11-25 10:51
回复 4# lxh623
似乎不是很复杂的问题,被你描述得乱得很,不然早解决了。还不知我是否理解到要怎么弄。
简单地把要搜索的范围表为一处(如E:\涂料-防腐蚀)下的各级文件夹
“相应的文件夹”也放一处- @echo off
- set sd=E:\涂料-防腐蚀
- set dd=E:\相应目标文件夹
- set df=E:\文件夹名.txt
- set xn=*.pdf *.txt
- for /f "usebackq delims=" %%a in ("%df%")do (
- md "%dd%\%%a" 2>nul
- for /f "delims=" %%b in ('dir/b/s/ad "%dd%\*%%a*"')do (
- echo ==^> %%b
- for %%c in (%xn%)do move "%%b\%%c" "%dd%\%%a\"
- )
- )
- pause
复制代码
作者: lxh623 时间: 2011-11-25 14:43
回复 7# yyykkkyyyy
谢谢您!
原文件在E:\JP-XIN,下面搜索的是文件名。
for /f "delims=" %%k in ('dir /s/b/a-d E:\JP-XIN\*.pdf E:\JP-XIN\*.txt ^| findstr /i /c:"!VAR!"')
文件夹散布各处,下面得到的是文件夹路径。文件夹不动,只移动文件。
for /f "delims=" %%l in ('dir /s/b/a:d-h E:\ ^| findstr /i /c:"!VAR!"')
作者: yyykkkyyyy 时间: 2011-11-25 15:35
本帖最后由 yyykkkyyyy 于 2011-11-25 15:36 编辑
回复 8# lxh623
哦,你是说在文件名而不是文件夹名里找“关键字”,符合的移到对应文件夹去...- @echo off
- set sd=E:\JP-XIN
- set dd=E:\相应目标文件夹
- set df=E:\文件夹名.txt
- set sf="%sd%\*%%a*.pdf" "%sd%\*%%a*.txt"
- for /f "usebackq delims=" %%a in ("%df%")do (
- md "%dd%\%%a" 2>nul
- for /f "delims=" %%b in ('dir/b/s/a-d %sf%')do (
- echo %%b ==^> %dd%\%%a
- move "%%b" "%dd%\%%a\"
- )
- )
- pause
复制代码
作者: lxh623 时间: 2011-11-25 20:31
本帖最后由 lxh623 于 2011-11-25 20:44 编辑
回复 lxh623
哦,你是说在文件名而不是文件夹名里找“关键字”,符合的移到对应文件夹去...
yyykkkyyyy 发表于 2011-11-25 15:35
好像需要创建文件夹。
我的原意,是有这么个文件夹(唯一),搜索到文件,并移动到该文件夹。
文件夹的名称至少包括文本1.txt某一行(比如,“anti-foamer,antifoamer”)。
文本1.txt:
transfer print
anti-foamer
insect
fibre reinforced plastic
用文本1的每一行去搜索文件以及文件夹。
作者: lxh623 时间: 2011-11-25 20:58
回复 10# lxh623
有个设想,可惜不知道怎样实现。
if exixt var3 ,ifnot exist var3 & if exist var2,ifnot exist var3 & ifnot exist var2。
或者再分拆文本1为三个。一个词的、两个词的、三个词的。
作者: yyykkkyyyy 时间: 2011-11-26 10:59
本帖最后由 yyykkkyyyy 于 2011-11-26 11:08 编辑
回复 11# lxh623
楼主描述能力不佳,这看10楼说的,显然还没完全解决问题,说实话我还没理解想作什么,唯有楼主自己学会批处理才方便,那一个词几个词的要把findstr 命令学好才行,我这把顶楼代码改一下,本想尽量少动原码的,实在是不划算——原来为什么有误?因为找文件时是会带路径的,把文件夹名含要找的“关键字”的文件也算相符了,想还用findstr 的话,这个“正则式”会很复杂,还是不用findstr的好,如果还是不合意,请另想他法不宜在此老追问补充情况- @echo off
- setlocal ENABLEDELAYEDEXPANSION
- for /f "delims=" %%a in (文件夹名称1.txt)do (
- for /f "delims=" %%b in ('dir/s/b/ad "e:\*%%a*"')do (
- for /f "delims=" %%c in ('dir/s/b/a-d "E:\JP-XIN\*%%a*.pdf" "E:\JP-XIN\*%%a*.txt"')do (
- move "%%c" "%%b\" 2>nul
- )))
- pause
复制代码
作者: lxh623 时间: 2011-11-26 15:37
回复 9# yyykkkyyyy
谢谢您!
我说得不清楚,您也看得比较正确了。
真的还是不对,我也在想办法。
到现在错误的原因在于,文本出来的变量带有空格和“-”,从而,路经以及文件名称带有这两个东西。怎样设置变量?
因此,刚才我把第一句加上usebackq,仍然不对。(for /f "usebackq delims=")
曾经想避开变量(如下),也不行。- @echo off
- for /f "delims=" %%k in ('dir /s/b/a-d E:\JP-XIN\*.pdf E:\JP-XIN\*.txt ^| findstr /r /g:文件夹名称1.txt') do (
- for /f "delims=" %%l in ('dir /s/b/a:d-h E:\ ^| findstr /r /g:文件夹名称1.txt') do (
- if not "%%l"=="" move "%%k" "%%~fsl"
- ))
- pause
复制代码
作者: lxh623 时间: 2011-11-27 15:49
回复 13# lxh623
还想到一个办法。文本4列入:
anti-foamer
anti foamer
water-proof
water proof
然后把E盘所有含有这些词的文件名称中的词语修改为复合词,比如,antifoamer,waterproof。
之后,就可以按照一个词的批处理移动,这个我自己就会编出来。
作者: lxh623 时间: 2011-11-29 15:43
找到问题了。
文本里面有个roof形成干扰。- @echo off
- for /f "tokens=* delims=" %%a in (文件夹名称1.txt) do (
- set VAR=%%a
- setlocal ENABLEDELAYEDEXPANSION
- for /f "delims=" %%k in ('dir /s/b/a-d E:\JP-XIN\*.pdf E:\JP-XIN\*.txt ^| findstr /i /c:"!VAR!" 2^>nul') do (
- for /f "tokens=*" %%l in ('dir /s/b/a:d-h E:\ ^| findstr /e /c:"!VAR!" 2^>nul') do (
- if not "%%l"=="" move "%%k" "%%l\" >nul 2>nul
- )))
- pause
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |