我不时需要移动文件。我将所有文件名保存在一个文件中。编写批处理文件以读取文件名并移动它们很容易。就我而言,源目录和目标目录经常更改。因此,我想把它们放在文件的前两行。如何编写批处理文件来执行此操作?我使用“set / p”但它似乎只读取一个变量。该文件看起来像这样:
source directory
destination directory
file1
file2
file3
file4
...
答案 0 :(得分: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
,演示在处理列表文件中的行期间增加行号的另一种方法。
答案 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%"
)
答案 2 :(得分: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!"
)
)