2011-01-17 10 views
1

ダメージを受けているダムセルは、バッチスクリプトのヘルプが必要です。バッチ - 作成日時またはファイル名の末尾にランダムに追加する

1つのシステムで作成するファイルがたくさんあります。 2つのディレクトリのいずれか、またはそれより上のディレクトリ。

名前は明らかにあまり重要ではないので、少しランダムです。

質問が2つあります。

a)バッチスクリプトを使用してファイル名の最後に作成日時を追加するにはどうすればよいですか? b)バッチスクリプトを使用してランダムファイル名を追加する(ファイルを一意にするために)方法を教えてください。

おかげさまで、ごめんなさい。

よろしくお願いいたします。Maclovin!

私は創造の日についてsh * tを与えないことを私の知恵で決めました。とにかくファイルに続いて集めます。私が代わりにやりたいことは、今日の日時をファイルに追加することです。

これは私が持っているものです。

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 

答えて

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秒間に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にtheresのなら、私はあなたが必要なすべての変更を知ってみましょう。

+0

ありがとうございました!このスクリプトは私に今日の日付、またはファイルの作成日を取得しますか?そしてディレクトリをどのように反復するのですか? – Maclovin

+0

サイドノート:これは悲しいことに、常に特定のロケールを想定しています。バッチファイルには日付を実際に操作する方法がないため、すべての部分文字列の魔法はすばやく崩壊します。他のコンピュータでも実行する必要があるプログラムが必要な場合は、このプログラムを避けてください。 – Joey

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 
+0

レジストリを使用していても、日付/時刻の解析は正しく行われています。一部のロケールでは常に失敗します。 – Joey

+0

私は自分の知恵の中で、創造の日とともにf * ckを与えないことを決めました。最も重要なことは、一意のファイル名を取得することです。私が何をsofar持っている:最初の記事を参照してください。 – Maclovin

関連する問題