2013-10-03 116 views
0

我試圖在批處理文件中運行移動命令。 我已經幾乎做它工作得很好用這個...將「Move」命令的輸出捕獲到批處理變量中

Move /Y "%1\%2 %3" %4 >nul 
:: and this for decision making and logging... 
if %errorlevel%==0 GOTO DONE 
if %errorlevel%==1 GOTO FAILED 

注:1-4%是變量我從另一個批處理文件跨過該基本文件的原始路徑,文件名和新的道路。

但我想將命令的輸出捕獲到一個變量中,用於寫入同一批次內的日誌和決策... 我所指的輸出爲 1個文件已移動。成功時 或 未找到網絡路徑。當它無法找到該文件 或任何其他消息爲此事

到現在爲止我已經試過這...

for /f "tokens=*" %%a in ('Move /Y "%1\%2 %3" %4') do set FailReason=%%a 

,甚至當移動仍然工作... 我無法捕捉上面列出的輸出...

任何幫助將不勝感激。 在此先感謝。

+0

您可以使用**'設置/ p var = output.txt' **,但是我想你會想要最後一行,因爲這將表明有多少文件被移動。對於第一種情況,您需要將'move'命令輸出到output.txt – Monacraft

+0

編輯:**'set/p var = Monacraft

回答

0
@ECHO OFF 
SETLOCAL 
SET "sourcedir=c:\sourcedir" 
SET "destdir=c:\destdir" 

DEL "%destdir%\test*">NUL 2>nul 
FOR /l %%i IN (1,1,4) DO COPY /y NUL "%sourcedir%\testfile %%i.txt" >nul 
COPY /y NUL "%destdir%\testfile 2.txt" >NUL 
COPY /y NUL "%destdir%\testfile 4.txt" >NUL 
ATTRIB +r "%destdir%\testfile 4.txt" 

:: 5 tests - OK, destfile exists, destfile R/O, sourcefile not found, sourcedir does not exist 


CALL :testmove %sourcedir% testfile 1.txt %destdir% 
CALL :testmove %sourcedir% testfile 2.txt %destdir% 
CALL :testmove %sourcedir% testfile 4.txt %destdir% 
CALL :testmove %sourcedir% testfile 5.txt %destdir% 
CALL :testmove \unknowndir testfile 5.txt %destdir% 

ATTRIB -r "%destdir%\testfile 4.txt" 
GOTO :eof 

:testmove 
FOR /f "delims=" %%i IN ('Move /Y "%1\%2 %3" %4 2^>^&1') DO SET reason=%%i 
ECHO %* produced ERRORLEVEL %ERRORLEVEL% and reason %reason% 

GOTO :EOF 

ERRORLEVEL總是顯得0雖然...

1

這將讓你獲得STDERR和STDOUT到一個變量:

@echo off 
for /f "delims=" %%a in ('Move /Y "%1\%2 %3" %4 2^>^&1 ') do echo %%a 
相關問題