我想根据文件夹名称移动文件。
1.有些文件夹名称是用b2.txt编写的。在我的b2.txt中,每行包含一个或两个或三个单词,用空格或“ - ”连接。像这样:
transfer print
anti-foamer
insect
fibre reinforced plastic
2.我的文件位于“E:\ JP-XIN \”。
3.在E盘中,必须存在一个(仅一个)文件夹名称,该名称由b2.txt中的一行组成。
我的问题是如何将b2.txt中的每一行完全设置为变量。
在下面的代码中,“%% k”是通过搜索获得的文件名,“%% l”是通过搜索获得的文件夹的路径。代码无法正常工作。
@echo off
setlocal ENABLEDELAYEDEXPANSION
for /f "delims=" %%a in (b2.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
答案 0 :(得分:1)
我有一些时间花在一起,所以我加班加点如何解决我认为你的问题。
如果您的要求如下:
你想要:
然后下面的批处理文件解决了您的问题:
@echo off
for /f "delims=" %%a in (b2.txt) do (
if exist "E:\%%a" (
move "E:\JP-XIN\%%a.pdf" "E:\%%a"
move "E:\JP-XIN\%%a.txt" "E:\%%a"
)
)
如果.pdf和.txt是唯一具有该名称的文件,则两个move
命令可以只加入一个:
move "E:\JP-XIN\%%a.*" "E:\%%a"
如果这不是您的问题,请告诉我们您的问题是什么!
答案 1 :(得分:0)
您需要使用tokens=*
将整行作为单个变量返回。
for /f "tokens=* delims=" %%a in (b2.txt) do (
您还可以编写tokens=1,2*
之类的内容,它使第一个变量标记为1,第二个变量标记为2,第三个变量为该行的其余部分。所以文字:
Several words on a line.
将拆分为:
%%a = Several
%%b = words
%%c = on a line.