所以,这就是我所拥有的:我创build了一个小batch file,将pingtesting的结果logging到文本文件中。 我想要做的是运行batch file,并将结果日志自动移动到桌面上的特定文件夹。 然后,如果目标文件名存在,则相应地自动重命名。 意思是,如果File1存在,则创buildFile2,File3,等等等等。 以下是我到目前为止:
@echo off color A title Ping Test :A echo. cls ping google.com -n 4 > C:\Users\%username%\Desktop\pingresults.txt cls :Question echo. echo You can find the results in C:\Users\%username%\Desktop\pingresults.txt echo Would you like to run this test again? (Y/N) Set /p Choice= if %choice% equ y goto :A if %choice% equ n goto :Results if %choice% neq y goto :Question if %choice% neq n goto :Question :Results cls echo Would you like to view the results of the test? (Y/N) Set /p Choice= if %choice% equ y goto :OpenResults if %choice% equ n goto :Close if %choice% neq y goto :Results if %choice% neq n goto :Results :Close exit :OpenResults start C:\Users\%username%\Desktop\pingresults.txt
移动batch file如下所示:
@echo off echo. cd C:\Users\Diesel\Desktop move pingresults.txt PingResults\ if exist pingresults.txt ren pingresults.txt=+1 Exit.
我不想覆盖现有的文件,而是连续重命名。 我找不到任何有用的文章,只使用batch file,他们都说使用vbs或php,我不熟悉的语言
将文件重命名为file1 [file2][...]
并将其移动到桌面文件夹中:
@ECHO Off &SETLOCAL FOR %%a IN (*.txt) DO CALL:processFile "%%~a" goto:eof :processFile SETLOCAL :loop SET /a fileCounter+=1 SET "fileName=%~n1%filecounter%%~x1" IF EXIST "C:\Users\%username%\Desktop\%fileName%" GOTO:loop ECHO MOVE "%~1" "C:\Users\%username%\Desktop\%fileName%" ENDLOCAL goto:eof
看看输出,并在move
之前删除单词echo
,如果它看起来不错。
我有一对实用程序文件这样做,所以我可以从命令行或另一个批处理文件调用。 这在相同的文件夹中管理文件的几个版本,并且在移动你的新文件之前我会调用它。
用法是:
archivefile 5 "c:\temp\songs" .txt [move]
其中5是要保留的版本数量。 本例中的基本文件名为“ c:\temp\songs.txt
”,并创建(在c:\temp
)5个文件: songs_1.txt songs_2.txt songs_3.txt songs_4.txt songs_5.txt
如果你指定move
它将移动原来的songs.txt
否则它复制它。
注意,如果你从另一个批处理文件(你可能想要)使用它,你需要使用call
,否则它将不会返回到您的原始批处理文件(这两个批处理文件将退出,而不是你想要什么):
call archivefile 5 "c:\temp\songs" .txt
您需要将这对批处理文件放在当前目录或Windows路径中。 现在我想一想,archivefile_b.bat可能是主文件中的一个子例程,但是它并没有被破坏,所以我不打算修复它。
这是archivefile.bat:
@Echo off rem archivefile.bat - keep a number of archives of a file rem paramters: n rootfile extension [move|copy] rem n = number of files to keep. rem move|copy optional indicator to rename (move) the original file instead of copying it rem archivefile 5 "c:\temp\songs" .txt [move] rem if "%3"=="" goto usage set _af_n=%1 set _af_root=%2 set _af_ext=%3 set _af_move=copy set _af_moveX=%4 if "%_af_moveX%"=="move" set _af_move=move set _af_i= set _af_j= rem make sure that the first parameter (n) is numeric set /A _af_n=%_af_n% if "%_af_n%"=="0" echo Error: number of copies must be numeric (%1) & goto usage if not exist %_af_root%%_af_ext% echo Error: cannot locate main file: %_af_root%%_af_ext% & goto error rem remove the oldest file if exist %_af_root%_%_af_n%%_af_ext% del %_af_root%_%_af_n%%_af_ext% rem move up the remainder for /L %%i in (%_af_n%, -1, 1) do call archivefile_b %%i %_af_root% %_af_ext% rem copy the original if "%_af_move%"=="move" goto moveIt rem move not specified - make a copy copy %_af_root%%_af_ext% %_af_root%_1%_af_ext% goto moveCopyDone :moveIt rem need filename only for a rename set _af_destfile=%_af_root%_1%_af_ext% set _af_destfile=%_af_destfile:"=% for %%i in (%_af_destfile%) do set _af_destfile=%%~ni%%~xi ren %_af_root%%_af_ext% %_af_destfile% :moveCopyDone dir %_af_root%*%_af_ext% goto done :usage echo usage: archivefile n rootfile extension echo - n = number of archives to keep echo - rootfile = the root filename echo - extension = file extension echo. echo example: echo archivefile 5 "c:\Documents and Settings\gregh\My Documents\Rescued document" .txt goto done :error rem could maybe do something here? naa. goto done :done
这是archivefile_b.bat,它只管理其中一个文件:
rem @Echo off rem archivefile_b.bat - helper for the archivefile routine rem -- juggles ONE of the archive files. rem paramters: n rootfile extension rem n = the index to move from n to n+1 rem archivefile 5 "c:\temp\songs" .txt rem therefore renames c:\temp\songs_5.txt to c:\temp\songs_6.txt set _afb_n=%1 set _afb_root=%2 set _afb_ext=%3 rem make sure that the first parameter (n) is numeric set /A _afb_n=%_afb_n% if "%_afb_n%"=="0" echo Error: (archivefile_b) number of copies must be numeric (%1) & goto done set /A _afb_j=%_afb_n%+1 rem define the file names set _afb_fn=%_afb_root%_%_afb_n%%_afb_ext% set _afb_fj=%_afb_root%_%_afb_j%%_afb_ext% rem remove the quotes set _afb_fn=%_afb_fn:"=% set _afb_fj=%_afb_fj:"=% rem can only supply a filename to the ren command (not path) for %%i in (%_afb_fj%) do set _afb_fj=%%~ni%%~xi rem do the rename now if exist "%_afb_fn%" ren "%_afb_fn%" "%_afb_fj%" :done