たきるブログ

C#やOracleなどの情報を書いています。

作ったものリスト

Windows

Oracle

.NET Framework

PowerBuilder

【PowerBuilder】PBL内のソースを一括エクスポートする&ソース管理する

当初の目的

PowerBuilderで作成されたアプリケーションをソース管理して、変更点を把握したかった。
それを達成するために全PBLの全ソースを一括エクスポートしたかった。

PowerBuilderの問題点

PowerBuilderを操作しても、PBL単位でしかエクスポートができない。
これはPBLが30も40もあるプロジェクトだと手間で仕方ない。
一度きりなら我慢できるが、ソースを変更する度にその手間が発生するなら目的を達成できない。

作っちまえ!

作りました。

github.com

気づいた問題点

PowerBuilderがバカなことに、少しソースを変更しただけで、いじってもいないコードの位置が変わってしまって比較にならない。
ここはもはやご愛嬌として諦めるしかない。
ソース単位ですべて管理することになったので、多少なりとも管理はできるようになった。 一括エクスポートができるという使い方なら問題ないので。

作ったものリスト

Windows

Oracle

.NET Framework

PowerBuilder

【VBScript】ショートカットファイルを作成する

VBScriptを使って、バッチから特定のショートカットファイルを作成した場合などに有効。

下記の例では、受け取るパラメーターはこの通り。
ショートカットファイルのファイル名の拡張子はlnkまたはurlでなければならない。
また、作業フォルダは元ファイルのパスとなるようにしている。

No. 内容
1 元ファイルのパス C:\hoge
2 元ファイルのファイル名 元ファイル.xlsx
3 ショートカットファイルのパス D:\shortcut
4 ショートカットファイルのファイル名 ショートカットファイル.lnk

create_shortcut.vbs

Dim params
Dim sourcePath
Dim sourceFile
Dim targetPath
Dim targetFile

' コマンドライン引数を取得
Set params = Wscript.Arguments
If params.Count < 4 Then
   WScript.echo "コマンドライン引数が足りません"
   WScript.Quit
End If

sourcePath = params(0)
If Right(sourcePath, 1) <> "\" Then
    sourcePath = sourcePath & "\"
End If
sourceFile = params(1)
targetPath = params(2)
If Right(targetPath, 1) <> "\" Then
    targetPath = targetPath & "\"
End If
targetFile = params(3)


' ショートカットを作成
Dim objShell
Dim objShortCut
Set objShell = WScript.CreateObject("WScript.Shell")
Set objShortCut = objShell.CreateShortcut(targetPath & targetFile)
objShortCut.TargetPath = sourcePath & sourceFile
objShortCut.WorkingDirectory = sourcePath
objShortCut.Save

Set objShortCut = Nothing
Set objShell = Nothing

【バッチ】管理者権限で外部アプリケーションを実行する

Administratorユーザーでアプリケーションの実行を行う。

runas /noprofile /user:Administrator "cmd.exe"

【バッチ】Administratorsグループの所属しているか確認する

net user コマンドを使って、現在のユーザーがAdministrators グループに所属しているかを確認する。

net user %USERNAME% | findstr "Administrators"

【バッチ】管理者権限があるかどうか確認する

openfiles コマンドが管理者権限を必要とすることを利用して、管理者権限があるかどうかを確認することができる。

openfiles > NUL 2>&1 
if %ERRORLEVEL% EQU 0 goto Main
echo 管理者権限で実行してください。
pause
exit

【TortoiseSVN】リポジトリの統合方法

いっつも忘れるので備忘録を。

-- 旧リポジトリからすべてダンプエクスポート
svnadmin dump D:\oldrepos > D:\oldrepos.dump

-- newreposにnewdirディレクトリを作成。

-- 新リポジトリのnewdirディレクトリ配下にダンプをインポート
svnadmin load D:\newrepos --parent-dir newdir < D:\oldpres.dump

oldpres
 ├ branches
 ├ tags
 └trunk

だった時、

newrepos
 └ newdir
   ├ branches
   ├ tags
   └ trunk

になる。
例えば、ユーザーのプロジェクト単位にリポジトリが存在していて、それを統合し、ユーザー単位にリポジトリをしたい時、有効だと思う。

リポジトリから特定のディレクトリのみ、新リポジトリに統合させたい場合は以下のようにする。

-- 旧リポジトリからtrunkのみダンプエクスポート
svnadmin dump D:\oldrepos | svndumpfilter include /trunk > D:\oldrepos.dump

-- newreposにnewdirディレクトリを作成。

-- 新リポジトリのnewdirディレクトリ配下にダンプをインポート
svnadmin load D:\newrepos --parent-dir newdir < D:\oldrepos.dump

svndumfilter include は、半角スペースで区切ることで複数ディレクトリを同時に指定可能。