如何在批处理文件中设置变量

时间:2011-11-26 02:26:30

标签: batch-file

我想根据文件夹名称移动文件。

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

2 个答案:

答案 0 :(得分:1)

我有一些时间花在一起,所以我加班加点如何解决我认为你的问题。

如果您的要求如下:

  1. b2.txt文件包含多个文件夹名称,可能有空格。
  2. 在E:\中,有一个文件夹包含在b2.txt。
  3. 在E:\ JP-XIN \中有几个* .pdf和* .txt文件。
  4. 你想要:

    1. 找到b2.txt和
    2. 中包含的文件夹
    3. 将具有相同文件夹名称的* .pdf和* .txt文件移至其中
    4. 然后下面的批处理文件解决了您的问题:

      @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.