批处理文件从文件的前两行设置两个变量,然后移动文件

问题描述 投票:0回答:3

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

source directory
destination directory
file1
file2
file3
file4
...
batch-file
3个回答
1
投票

您可以使用以下代码:

@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

要了解所使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。

  • for /?
  • if /?
  • move /?
  • set /?

删除行

rem set /A Line+=1
演示了在处理列表文件中的行期间增加行号的另一种方法。


0
投票

如果您想使用

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

@echo off
    setlocal enableextensions disabledelayedexpansion

    rem Prepare variables to hold data
    set "inputFile=config.txt"
    set "sourceDir="
    set "targetDir="

    rem Read first two lines of the input file
    < "%inputFile%" (
        set /p "sourceDir=" 
        set /p "targetDir=" 
    )

    rem Check we have the required information
    if not defined sourceDir goto :eof
    if not defined targetDir goto :eof

    rem Process the config file skipping the first two lines
    for /f "usebackq skip=2 delims=" %%a in ("%inputFile%") do (
        echo move "%sourceDir%.\%%a" "%targetDir%"
    )

0
投票

此方法使用

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!"
   )
)
© www.soinside.com 2019 - 2024. All rights reserved.