Batch file batch file,从文件的前两行设置两个变量,然后移动文件

Batch file batch file,从文件的前两行设置两个变量,然后移动文件,batch-file,Batch File,有时,我需要移动文件。我将所有文件名保存在一个文件中。编写批处理文件以读取文件名并移动它们很容易。在我的例子中,源目录和目标目录经常更改。因此,我想把它们放在文件的前两行。如何编写批处理文件来实现这一点?我使用“set/p”,但它似乎只读取一个变量。该文件如下所示: source directory destination directory file1 file2 file3 file4 ... 例如,您可以使用以下代码: @echo off setlocal EnableExtension

有时,我需要移动文件。我将所有文件名保存在一个文件中。编写批处理文件以读取文件名并移动它们很容易。在我的例子中,源目录和目标目录经常更改。因此,我想把它们放在文件的前两行。如何编写批处理文件来实现这一点?我使用“set/p”,但它似乎只读取一个变量。该文件如下所示:

source directory
destination directory
file1
file2
file3
file4
...

例如,您可以使用以下代码:

@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "Source="
set "Destination="
set "Line=1"
for /F "usebackq delims=" %%I in ("ListFile.txt") do (
    if !Line! GTR 2 (
        move /Y "!Source!\%%~I" "!Destination!\%%~I"
    ) else if !Line! == 1 (
        set "Source=%%~I"
        set "Line=2"
    ) else (
        set "Destination=%%~I"
        set "Line=3"
    )
    rem set /A Line+=1
)
endlocal
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • 获取/?
  • 如果/?
  • 移动/?
  • 设置/?

删除行
rem set/A line+=1
演示在处理列表文件中的行时增加行号的另一种方法。

如果要使用
set/p
检索文件的前两行,必须在保持重定向打开的同时执行两次读取,以便第二次读取将检索下一行

@echo关闭
setlocal enableextensions disabledelayedexpansion
rem准备变量以保存数据
设置“inputFile=config.txt”
设置“sourceDir=”
设置“targetDir=”
rem读取输入文件的前两行
<%inputFile%“(
设置/p“sourceDir=”
设置/p“targetDir=”
)
rem检查我们是否有所需的信息
如果未定义sourceDir转到:eof
如果未定义targetDir转到:eof
rem处理配置文件时跳过前两行
对于/f“usebackq skip=2 delims=“%a in”(“%inputFile%”)do(
回显移动“%sourceDir%”。\%%a“%targetDir%”
)

此方法使用
findstr/N
命令计算行数。
for/F
命令获取
%%a
中的数字和
%%b
中的行:

@echo off
setlocal EnableDelayedExpansion

for /F "tokens=1* delims=:" %%a in ('findstr /N "^" theFile.txt') do (
   if %%a leq 2 (
      set "line%%a=%%b"
   ) else (
      move "!line1!\%%b" "!line2!"
   )
)