[已解决]移动文件的批处理有什么问题?
[i=s] 本帖最后由 lxh623 于 2011-11-29 15:44 编辑 [/i]我自己做了批处理,用了几天,今天发现有问题。
批处理在这里,[url]http://www.bathome.net/thread-14568-2-1.html[/url]
[url]http://www.bathome.net/thread-14686-1-1.html[/url]
路径:
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[code]@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[/code]感谢您的帮助! AU9941499-=aqueous silane emulsion for dam[b]p-roof[/b]ing building materials-RP
AU2009251100-=weather-[b]proof[/b] sealing arrangement for use in switching cabinet
是因为这些特殊字符串吧 [i=s] 本帖最后由 lxh623 于 2011-11-24 09:50 编辑 [/i]
[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=97435&ptid=14810]2#[/url] [i]awk[/i] [/b]
“文件夹名称1”是每行一个到三个英文单词,单词间是空格或者“-”。像这种,我想首先提取每一行作为搜索字串。
用下面的代码试验,结果正常。但是,移动文件还是不行。
问题在于,proof不是一行,应该提取搜索词出现故障。
参考:[url]http://www.bathome.net/viewthread.php?tid=4274[/url][code]@echo off
for /f "delims=*" %%a in (文件夹名称1.txt) do (
echo %%a>>b.txt)
pause[/code] 诸位大虾,我真的着急死了!
感谢! [b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=97446&ptid=14810]3#[/url] [i]lxh623[/i] [/b]
proof不是一行,这是什么意思? [quote]回复 lxh623
proof不是一行,这是什么意思?
[size=2][color=#999999]awk 发表于 2011-11-24 23:23[/color] [url=http://www.bathome.net/redirect.php?goto=findpost&pid=97539&ptid=14810][img]http://www.bathome.net/images/common/back.gif[/img][/url][/size][/quote]
文件夹名称1:
fog-proof
waterproof
water-proof [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=97530&ptid=14810]4#[/url] [i]lxh623[/i] [/b]
似乎不是很复杂的问题,被你描述得乱得很,不然早解决了。还不知我是否理解到要怎么弄。
简单地把要搜索的范围表为一处(如E:\涂料-防腐蚀)下的各级文件夹
“相应的文件夹”也放一处[code]@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
[/code] [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=97552&ptid=14810]7#[/url] [i]yyykkkyyyy[/i] [/b]
谢谢您!
原文件在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!"') [i=s] 本帖最后由 yyykkkyyyy 于 2011-11-25 15:36 编辑 [/i]
[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=97589&ptid=14810]8#[/url] [i]lxh623[/i] [/b]
哦,你是说在文件名而不是文件夹名里找“关键字”,符合的移到对应文件夹去...[code]@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
[/code] [i=s] 本帖最后由 lxh623 于 2011-11-25 20:44 编辑 [/i]
[quote]回复 lxh623
哦,你是说在文件名而不是文件夹名里找“关键字”,符合的移到对应文件夹去...
[size=2][color=#999999]yyykkkyyyy 发表于 2011-11-25 15:35[/color] [url=http://www.bathome.net/redirect.php?goto=findpost&pid=97594&ptid=14810][img]http://www.bathome.net/images/common/back.gif[/img][/url][/size][/quote]
好像需要创建文件夹。
我的原意,是有这么个文件夹(唯一),搜索到文件,并移动到该文件夹。
文件夹的名称至少包括文本1.txt某一行(比如,“anti-foamer,antifoamer”)。
文本1.txt:
transfer print
anti-foamer
insect
fibre reinforced plastic
用文本1的每一行去搜索文件以及文件夹。 [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=97620&ptid=14810]10#[/url] [i]lxh623[/i] [/b]
有个设想,可惜不知道怎样实现。
if exixt var3 ,ifnot exist var3 & if exist var2,ifnot exist var3 & ifnot exist var2。
或者再分拆文本1为三个。一个词的、两个词的、三个词的。 [i=s] 本帖最后由 yyykkkyyyy 于 2011-11-26 11:08 编辑 [/i]
[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=97621&ptid=14810]11#[/url] [i]lxh623[/i] [/b]
楼主描述能力不佳,这看10楼说的,显然还没完全解决问题,说实话我还没理解想作什么,唯有楼主自己学会批处理才方便,那一个词几个词的要把findstr 命令学好才行,我这把顶楼代码改一下,本想尽量少动原码的,实在是不划算——原来为什么有误?因为找文件时是会带路径的,把文件夹名含要找的“关键字”的文件也算相符了,想还用findstr 的话,这个“正则式”会很复杂,还是不用findstr的好,如果还是不合意,请另想他法不宜在此老追问补充情况[code]@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[/code] [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=97594&ptid=14810]9#[/url] [i]yyykkkyyyy[/i] [/b]
谢谢您!
我说得不清楚,您也看得比较正确了。
真的还是不对,我也在想办法。
到现在错误的原因在于,文本出来的变量带有空格和“-”,从而,路经以及文件名称带有这两个东西。怎样设置变量?
因此,刚才我把第一句加上usebackq,仍然不对。(for /f "usebackq delims=")
曾经想避开变量(如下),也不行。[code]
@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[/code] [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=97651&ptid=14810]13#[/url] [i]lxh623[/i] [/b]
还想到一个办法。文本4列入:
anti-foamer
anti foamer
water-proof
water proof
然后把E盘所有含有这些词的文件名称中的词语修改为复合词,比如,antifoamer,waterproof。
之后,就可以按照一个词的批处理移动,这个我自己就会编出来。 找到问题了。
文本里面有个roof形成干扰。[code]@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[/code]
页:
[1]