batch - 附加创建日期/时间或随机到文件名结尾

时间:2011-01-17 13:46:49

标签: windows batch-file windows-server-2003 append

陷入困境的少女需要有关批处理脚本的帮助。

我有一堆系统创建的文件。可以在2个目录中的一个目录中,也可以在上面的目录中。

命名显然不是很重要,所以它有点随机。

你有两个问题 - 批量天才。

a)如何使用批处理脚本将创建的日期/时间附加到文件名的末尾? b)如何使用批处理脚本附加随机文件名(因此我使文件唯一)?

先谢谢,老兄和老兄。

您诚挚的,Maclovin!

我凭智慧决定不对创作日期作出判断。无论如何,我按照文件收集它。我想要做的是将今天的日期/时间附加到文件中。

这就是我所拥有的:

SetLocal EnableDelayedExpansion
set kvitt1="c:\a"
set kvitt2="c:\b"
set tmpDir="c:\temp"
set LASTMOD= 
set DATO=%DATE%
set KLOKKE=%TIME%
pause

REM lets go to this directory, and scan for files, and copy to the temp
pushd %kvitt1%

:ONE
for /f "tokens=*" %%a in ('dir /b /od 2^>NUL') do set lastmod=%%a
if "%lastmod%"=="" echo Could not locate files.&goto :TWO

COPY "%Lastmod%" %tmpDir%
pause

@ping 127.0.0.1 -n 2 -w 1000 > nul
@ping 127.0.0.1 -n %1% -w 1000> nul

popd
@ping 127.0.0.1 -n 2 -w 1000 > nul
@ping 127.0.0.1 -n %1% -w 1000> nul

REM Let's go to the next directory, and scan for files to copy to the temp
:TWO
REM Gå til ny nettverksstasjon
pushd %kvitt2%

for /f "tokens=*" %%a in ('dir /b /od 2^>NUL') do set lastmod=%%a
if "%lastmod%"=="" echo Could not locate files.&goto :EOF

COPY "%LASTMOD%" %tmpDir%
pause
@ping 127.0.0.1 -n 2 -w 1000 > nul
@ping 127.0.0.1 -n %1% -w 1000> nul

popd

REM we have copied the files we need, lets skip to the temp directory for renaming and filenaming

pushd %tmpDir%
echo %tmpDir%
pause

REM this is clearly not doing much.
REM gåsetegn foran tmpDir fordi det kan finnes filer med mellomrom. dir/b lister opp filene i mappen, og lagrer det i  filelist.txt
dir /b "%tmpDir%" >>filelist.txt
pause
REM går igjennom alle linjene i fillist.txt. %%i inneholder filnavnet
pause
REM for /f %%i in (filelist.txt) do
REM (

REM This is clearly not working
for /F "tokens=2,3,4 delims=/ " %%a in ('date /t') do set filedate=%%a-%%b-%%c
ren %filedate%_"%%T" "%T" 
REM ren "%%T" %!random%"%%~nT.kvi")

pause

2 个答案:

答案 0 :(得分:1)

试试这个:

ECHO Making the copy...
COPY C:\file.txt c:\file_%time:~0,2%%time:~3,2%%time:~6,2%_%date:~-10,2%%date:~-7,2%%date:~-4,4%.txt
PAUSE
CLS
EXIT

时间解析完成(如果在命名文件时使用它,则省略ECHO):

ECHO %time:~0,2%%time:~3,2%%time:~6,2%_%date:~-10,2%%date:~-7,2%%date:~-4,4%

我从http://www.ozzu.com/mswindows-forum/can-batch-files-use-date-for-filename-creation-t75600.html得到了这个,其中有更多细节。

至于b,这里的时间记录最多几秒,所以追加时间将使其独一无二,除非你的每秒超过1次。

编辑:这只获取当前日期。对于批量重命名为文件日期,请尝试改为:

for /f "delims=|" %%f in ('dir /b C:\temp') do call :runsub %%f
goto EOF

:runsub
set t=%~t1
set t=%t::=%
set t=%t: =%
set t=%t:/=%
set renameto=%~n1-%t%%~x1
Copy %1 %renameto%

:EOF
PAUSE

您可以将C:\ temp更改为您要更改文件的路径。如果您需要更改,请告诉我。

答案 1 :(得分:0)

最好使用vbscript(如果有的话,还是PowerShell),而不是批处理。这是因为批处理中的日期操作取决于计算机的区域设置。您将不得不使用诸如进入注册表和解决方法之类的技巧。

这是一个可以适应您需求的vbscript。

Set objFS = CreateObject( "Scripting.FileSystemObject" )
strFolder = WScript.Arguments(0)
Set objFolder = objFS.GetFolder(strFolder)
t = Now
strDate = Year(t) & Month(t) & Day(t) & Hour(t) & Minute(t) & Second(t)
' by random number
Randomize
upperbound = 99999
lowerbound = 55555

For Each strFile In objFolder.Files
    strExtension = objFS.GetExtensionName( strFile )
    strName = objFS.GetBaseName( strFile)   
    rand = Int((upperbound - lowerbound + 1) * Rnd + lowerbound) 'gen random number
    ' uncomment to use date
    ' strFile.Name = strName & strDate & "." & strExtension 

    ' uncomment to use random number of your choosing
    ' strFile.Name = strName & rand & "." & strExtension

Next