[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]批处理怎样批量移动文件?

本帖最后由 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

本帖最后由 lxh623 于 2011-11-14 16:22 编辑

回复 16# lxh623
上面这个,我换成"%%~fsl",基本解决了,尽管不知道道理。
又想到我的文本象下面,怎样把每一行当成一个单词去搜索。
首先,怎样echo含有空格的每一行。
谢谢您!
文件夹名称1.txt:(示例)
antenna
liq crystal
liquid crystal

TOP

本帖最后由 lxh623 于 2011-11-13 23:55 编辑
CrLf 发表于 2011-11-12 00:33

学习了延迟变量,修改了我自己那个。可以移动,但是移动到该文件夹的母文件夹。不知道哪里有问题?麻烦帮我看看。
另外,“!filename:%%b=!” 这段是什么含意,在哪里查得到,哪本书上?
谢谢您们!
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. for /f "tokens=1,2 delims= " %%i in (文件夹名称2.txt) do (
  4.       set var1=%%i & set var2=%%j
  5.       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 (
  6.          for /f "delims=" %%l in ('dir /s/b/a:d-h E:\ ^| findstr /i "!var1!"^|findstr /i "!var2!"  2^>nul') do (
  7.             if not "%%l"=="" move "%%k" "%%~dpl" >nul 2>nul
  8. )))
  9. pause
复制代码

TOP

本帖最后由 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')
我按照您的,做成下面这样子,不运行:
  1. @echo off&setlocal enabledelayedexpansion
  2. cd e:\JP-WKA
  3. for /f "tokens=1,2" %%a in (e:\文件夹名称2.txt) do (
  4.       for %%c in (*%%a*.*) do (
  5.          set filename=%%c
  6.          if "!filename:%%b=!" neq "!filename!" do (
  7.             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
  8. )))
  9. pause
复制代码

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. cd e:\JP-XIN
  3. for /f %%a in (e:\文件夹名称1.txt) do if exist *%%a*.* md %%a&move *%%a*.* %%a\
  4. for /f "tokens=1,2" %%a in (e:\文件夹名称2.txt) do (
  5.    for %%c in (*%%a*.*) do (
  6.       set filename=%%c
  7.       if "!filename:%%b=!" neq "!filename!" md "%%a %%b"&move "%%c" "%%a %%b\"
  8.    )
  9. )
复制代码
1

评分人数

TOP

不太明白,举个例子,比如有个文件叫作 batch.pdf,是可以与 bat 这个关键词匹配呢?还是只能按 batch 这个 ...
CrLf 发表于 2011-11-11 22:25

拜托大侠!
我想事先的文件夹名称会考虑周到一点。
我想的是,只要含有,就移动。不考虑精确匹配。比如,batchly,batchlise都移动到batch。

TOP

不太明白,举个例子,比如有个文件叫作 batch.pdf,是可以与 bat 这个关键词匹配呢?还是只能按 batch 这个完整的单词来看呢?

TOP

为什么想要这么个批处理?
因为下载了文献题录,每年更新部分就有上万条。我想,先建立了空白txt,然后,自动整理,就可以节约大量时间。

TOP

怎样把下面两个复合到一起?怎样使得后面的代码能够用到"%%i"、“%%j”?
谢谢!
  1. @echo off
  2. for /f "usebackq tokens=1,2 delims= " %%i in ("文件夹名称2.txt")
  3. do(echo %%i %%j)
复制代码
  1. 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 (
  2.      for /f "delims=" %%l in ('dir /s/b/a:d-h E:\ ^| findstr /i "%%i"^|findstr /i "%%j"  2^>nul') do (
  3.        if not "%%l"=="" move "%%k" "%%~dpl" >nul 2>nul
  4. ))
  5. pause
复制代码

TOP

本帖最后由 lxh623 于 2011-11-9 23:51 编辑

担心第一句是错的。第一个do前面是错的。
下面这样子也有问题,为什么?空格作为分隔符,怎样表示?用“*”,可以吗?
没有明确出现"%%j",先出现“%%k”,合适吗?
%%k得到是带有路径的文件名,对不对?
  1. @echo off
  2. for /f "delims=  tokens=1,2" %%i in (b2.txt) do (
  3.   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 (
  4.     for /f "delims=" %%l in ('dir /s/b/a:d-h E:\ ^| findstr /i "%%i"^|findstr /i "%%j"  2^>nul') do (
  5.       if not "%%l"=="" move "%%k" "%%~dpl" >nul 2>nul
  6. )))
  7. pause
复制代码
开始部分可不可以这样:(它后面又能用什么连接词,连接到“ for /f "delims=" %%k in ('dir /s/b/a-d E:\JP-WKA\*”?)
  1. for /f "delims=  tokens=1,2" %%i in (b2.txt) do (echo %%i %%j
复制代码

TOP

我自己学习一晚上,得到代码,不正确。请高手指正修改:
  1. @echo off
  2. for /f "delims=  tokens=1" %%i in (文件夹名称2.txt)
  3. for /f "delims=  tokens=2" %%j in (文件夹名称2.txt)  do
  4. (
  5.     for /f "delims=*" %%k in ('dir /s/b/a-d E:\JP-XIN\*.pdf E:\JP-XIN\*.txt  ^| findstr /i "%%i"^|findstr /i "%%j"')
  6.     (for /f "delims=" %%l in ('dir /s/b/a:d-h E:\ ^|findstr /i "%%i"^|findstr /i "%%j"'>nul') do (
  7.        if not "%%l"=="" move "%%k" "%%~dpl" >nul 2>nul
  8. )))
  9. pause
复制代码

TOP

本帖最后由 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(过渡一下)。

TOP

文件夹defoam是在E:\下面,还是在E:\JP-XIN\下面?

TOP

回复  lxh623
到底是“移动”还是“拷贝”?理解没错的话应该是“拷贝”吧,就拿第一个批处理来说,一个文 ...
weichenxiehou 发表于 2011-11-2 22:03

谢谢!
是“移动”。
移动的话,后面的就不考虑了。

TOP

回复 1# lxh623
到底是“移动”还是“拷贝”?理解没错的话应该是“拷贝”吧,就拿第一个批处理来说,一个文件名中可能含有多个文件夹的名称,如果是移动的话,到底移动到哪个文件夹呢?
看得多说得多,远比不上写得多。

TOP

返回列表