2013-11-21 39 views
1

我需要将某个文本文件中指定的某些文件移动到另一个不同文本文件中指定的目录。使用批处理命令。批处理将文本文件中指定的文件移动到文本文件提供的目录

我试过了。

@echo off 
echo. 
REM check if file is there 
if exist K:\file_sync_diff\FileNameList.txt goto Label 1 
REM display error 
echo Can not find the File Name List 
echo. 
echo. 
Pause 
goto :eof 

:Label 1 
REM display that the file in the last check was found 
echo found FileNameList.txt 
REM check if file is there 
if exist K:\file_sync_diff\FileDumpText.txt goto Label 2 
REM display error 
echo Can not find File Dump Text File 
echo. 
echo. 
Pause 
goto :eof 

:Label 2 
REM display that the file in the last check was found 
echo found FileDumpText.txt 
REM check if file is there 
if exist K:\file_sync_diff\DirectoryNames.txt goto Label 3 
REM display error 
echo Can not find Directory Names Text File 
echo. 
echo. 
Pause 
goto :eof 

:Label 3 
REM display that the file in the last check was found 
echo found DirectoryNames.txt 
REM for loop to filter through every line in a file 
echo. 
for /f %%i in (K:\file_sync_diff\FileNameList.txt) do call :Sub %%i 
goto Label 4 
goto :eof 

:Label 4 
REM display message of the file being moved 
echo. 
echo Moving %1 
REM copy the file just made to a directory with a name supplied in a text file 
for /f %%i in (K:\file_sync_diff\DirectoryNames.txt) do call :Sub 2 %%i 
echo. 
goto :eof 

:Sub 
echo Writing %1 
REM copy the contents of FileDumpText.txt to the file that was passed in the last method 
type K:\file_sync_diff\FileDumpText.txt >> %1.txt 
goto :eof 

:Sub 2 
REM moves the file to the directory supplied by label 4. 
move /y %1.txt %1 
echo. 
goto :eof 

内容的DirectoryNames.txt

K:\file_sync_diff\cat 
K:\file_sync_diff\dog 
K:\file_sync_diff\333 

这不是问题FileNameList.txt

red 
orange 
purple 

内容,但FileDumpText.txt
测试文字的内容传送到文件

more text 1 
more text 2 
more text 3 

这些目录确实存在于K:\file_sync_diff文件夹中。

谢谢你的帮助。

最终的结果应该与red.txt以下 目录里面的猫所有的FileDumpText.txt的内容里面 目录狗orange.txt里面所有的FileDumpText.txt的内容里面 目录333与所有的FileDumpText.txt内容purple.txt里面里面

+0

这将使要解决的问题,如果你删除了所有多余的代码,并将其简化为一个for循环,只是试图读取文件列表和呼应的文件名要容易得多,然后从那里建起来。 –

回答

0

我成功地使用下面的代码,但有一个问题。我现在得到一个“.txt”文件。这是由FileNameList.txt文件中的返回章程引起的,但如果它们在FileNameList.txt中的最后一个文件名之后没有返回,那么该文件不会被复制。 所以我只需要一行代码来删除“.txt”,而不是其他任何具有实际name.txt的文件。任何帮助都可以。

我当前的代码

@echo off 
echo. 
REM check if file is there 
if exist F:\file_sync_diff\FileNameList.txt goto Label 1 
REM display error 
echo Can not find the File Name List 
echo. 
echo. 
Pause 
goto :eof 

:Label 1 
REM display that the file in the last check was found 
echo found FileNameList.txt 
REM check if file is there 
if exist F:\file_sync_diff\FileDumpText.txt goto Label 2 
REM display error 
echo Can not find File Dump Text File 
echo. 
echo. 
Pause 
goto :eof 

:Label 2 
REM display that the file in the last check was found 
echo found FileDumpText.txt 
REM check if file is there 
if exist F:\file_sync_diff\DirectoryNames.txt goto Label 3 
REM display error 
echo Can not find Directory Names Text File 
echo. 
echo. 
Pause 
goto :eof 

:Label 3 
REM display that the file in the last check was found 
echo found DirectoryNames.txt 
REM for loop to filter through every line in a file 
echo. 
for /f %%i in (F:\file_sync_diff\FileNameList.txt) do call :Sub %%i 
goto Label 4 
goto :eof 

:Label 4 
REM thanks to [email protected] 
@ECHO OFF &SETLOCAL 
REM set associative arrays 
set "tfileA=F:\file_sync_diff\FileNameList.txt" 
set "tfileB=F:\file_sync_diff\DirectoryNames.txt" 
REM setup for loops 
for /f "tokens=1*delims=:" %%a in ('findstr /n $ "%tfileA%"') do set "$a%%a=%%b"&set /a countA=%%a 
for /f "tokens=1*delims=:" %%a in ('findstr /n $ "%tfileB%"') do set "$b%%a=%%b"&set /a countB=%%a 

SETLOCAL ENABLEDELAYEDEXPANSION 
for /l %%a in (1 1 %countA%) do (
    echo. 
    move "!$a%%a!.txt" "!$b%%a!" 
    echo. 
    echo ^>"!$b%%a!\!$a%%a!" echo(!$c%%a!) 
    echo. 
endlocal 

:Sub 
echo Writing %1 
REM copy the contents of FileDumpText.txt to the file that was passed in the last method 
type F:\file_sync_diff\FileDumpText.txt >> %1.txt 
goto :eof 
0

我的建议与associative arrays

@ECHO OFF &SETLOCAL 
set "tfileA=K:\file_sync_diff\FileNameList.txt" 
set "tfileB=K:\file_sync_diff\DirectoryNames.txt" 
set "tfileC=K:\file_sync_diff\FileDumpText.txt" 

for /f "tokens=1*delims=:" %%a in ('findstr /n $ "%tfileA%"') do set "$a%%a=%%b"&set /a countA=%%a 
for /f "tokens=1*delims=:" %%a in ('findstr /n $ "%tfileB%"') do set "$b%%a=%%b"&set /a countB=%%a 
for /f "tokens=1*delims=:" %%a in ('findstr /n $ "%tfileC%"') do set "$c%%a=%%b"&set /a countC=%%a 
if "%countA%"=="%countB%" (echo %countA% line(s^) found in %tfileA% and %tfileB%.) else echo Line mismatch: %tfileA%:%countA% - %tfileB%:%countB%&goto:eof 
if "%countA%"=="%countC%" (echo %countA% line(s^) found in %tfileC%.) else echo Line mismatch: %tfileA%:%countA% - %tfileC%:%countC%&goto:eof 

SETLOCAL ENABLEDELAYEDEXPANSION 
for /l %%a in (1 1 %countA%) do (
    echo copy "!$a%%a!" "!$b%%a!" 
    echo ^>"!$b%%a!\!$a%%a!" echo(!$c%%a! 
) 
endlocal 

输出是:

 
3 line(s) found in K:\file_sync_diff\FileNameList.txt and K:\file_sync_diff\DirectoryNames.txt. 
3 line(s) found in K:\file_sync_diff\FileDumpText.txt. 
copy "red" "K:\file_sync_diff\cat" 
>"K:\file_sync_diff\cat\red" echo(more text 1 
copy "orange" "K:\file_sync_diff\dog" 
>"K:\file_sync_diff\dog\orange" echo(more text 2 
copy "purple" "K:\file_sync_diff\333" 
>"K:\file_sync_diff\333\purple" echo(more text 3 
相关问题