#pathMe
$pathMe = $pwd
#Constant
$pathTop = [Environment]::GetFolderPath('Desktop')
#Functions
#strings
function MySubstring{
param(
[string]$strIn,
[int]$nSta=0,$nCnt=$null)
if($nSta -gt $strIn.length){
$strOut = ''
}else{
if($nCnt -eq $null){ $nCnt = $strIn.length }
else{ [int]$nCnt=[int]$nCnt }
if($nCnt -le 0){ return ""}
if(($nSta + $nCnt) -gt $strIn.length){
$strOut = $strIn.Substring($nSta,($strIn.length - $nSta))
}else{
$strOut=$strIn.Substring($nSta,$nCnt)
}
}
return $strOut
}
function MyCharUp{
param(
$CharIn,
[int]$nUp=1
)
$buf=[byte][char]$CharIn
return [char]($buf+$nUp)
}
#Number and Time
function IsDateTime($var){
try{
$huga = [datetime]$var
}
catch{
return $false
}
return $true
}
function MyRound([double]$num, [int]$numDigits){
# 第二引数に切り捨てを行う桁数を指定。少数はマイナス(-)で指定できる
# 省略すれば、整数にする。
$m = [Math]::Pow(10,(- $numDigits));
return [Math]::Round($num * $m, [MidpointRounding]::AwayFromZero) / $m;
}
#Paths
function MyTestPath([string]$path,[string]$name){
if([bool]$name){
return (Test-Path ".\$name")
}
if([bool]$path){
return Test-Path $path
}else{
return $false
}
}
function MySplitPathDrive($path){
try{
$sDrv = Split-Path $path -Qualifier
}
catch{
$sDrv =''
}
return $sDrv
}
function CorrectName($name){
$name.Replace('\','').Replace(':','')
}
function MySplitName([string]$pathOrName){
$nmOut = Split-Path $pathOrName -Leaf
$nmOut = $nmOut -replace "\..*" , ""
return $nmOut
}
function GetDrivePaths{
$Drives = Get-PSDrive | where { ([string]$_.Name).Length -eq 1}
[string[]]$DrivePaths = @()
foreach($el in $Drives){
$DrivePaths += ( $el.name + ":" )
}
return $DrivePaths
}
#Files Edit
function ExitByCurDrive{
try{
$sDrv = Split-Path (Convert-Path .) -Qualifier
}
catch{
$sDrv =''
}
if($sDrv -ne 'C:'){
Write-Host 'C:ドライブでないためExit'
exit
}
}
function ExitByPasteDrive($pathPaste){
try{
$sDrv = Split-Path $pathPaste -Qualifier
}
catch{
$sDrv =''
}
if($sDrv -ne 'C:'){
Write-Host 'C:ドライブでないためExit'
exit
}
}
function CdMyData{
$pathData= "$pathMe\Data"
if(Test-Path $pathData){
cd $pathData
}else{
cd $pathMe
New-Item 'Data' -itemType Directory
cd $pathData
}
}
function MyRename{
param(
[string]$nmMoto,[string]$nmNew,
[switch]$RemoveByDate
)
ExitByCurDrive
if( (Test-Path ".\$nmMoto") -eq $False ){
return ('Error - not found '+ $nmMoto)
}
if($nmMoto -eq $nmNew){
return
}
if(Test-Path ".\$nmNew"){ #Rename先有りの時
if($RemoveByDate){
$tNew=(Get-ItemProperty $nmNew).LastWriteTime
$tMoto=(Get-ItemProperty $nmMoto).LastWriteTime
if($tNew -gt $tMoto){
MyRemove $nmMoto
}else{
MyRemove $nmNew
}
}
}
Rename-Item $nmMoto -newName $nmNew
return "Exec - $nmMoto to $nmNew"
}
function MyRemove($nmRm,[switch]$Force){
ExitByCurDrive
if( (Test-Path ".\$nmRm") -eq $True ){
$Error.Clear()
$ErrorActionPreference = "SilentlyContinue"
if($Force){ Remove-Item $nmRm -Force }
else{ Remove-Item $nmRm }
$ErrorActionPreference = "Continue"
if([bool]$Error){
return "Error: Fail to Remove $nmRm.`r`n--$Error[0]"
}else{ return "Exec: $nmRm Removed." }
}else{
return "Error: Not found $nmRm ."
}
}
function MyCopy($nmCopy,$pathPaste,[switch]$force){
ExitByPasteDrive $pathPaste
if( (Test-Path ".\$nmCopy") -eq $False ){
return ("Error: Not found $nmCopy .")
}
if( (Convert-Path .) -eq $pathPaste){
return ("Error: $pathPaste is current." )
}
if($force){ Copy-Item $nmCopy $pathPaste -Force }
else{
if(Test-Path "$pathPaste\$nmCopy"){
return ("Error: $pathPaste Already exists in $pathPaste ." )
}
Copy-Item $nmCopy $pathPaste
}
return "Exec: $nmCopy Copyto "+(Split-Path $pathPaste -Leaf)+" ."
}
function MyCopyInCurDir($nmCopy,$nmPaste){
#ExitByPasteDrive $pathPaste
if( (Test-Path ".\$nmCopy") -eq $False ){
return ('Error - not found '+ $nmCopy)
}
$fullPaste = (Convert-Path .) + "\$nmPaste"
if(Test-Path $fullPaste){
return ("Error - $nmPaste is exists" )
}
Copy-Item $nmCopy $nmPaste
return "Exec - $nmCopy Copy-to "+$nmPaste
}
function MakeShortcut($nmTarget,$pathPaste){
if( (Test-Path ".\$nmTarget") -eq $False ){
return ('Error - not found '+ $nmTarget)
}
if( (Test-Path $pathPaste) -eq $False ){
return ('Error - not found '+ $pathPaste)
}
ExitByPasteDrive $pathPaste
$FullTarget = Convert-Path $nmTarget
$FullLinkFile = "$pathPaste\$nmTarget - Link.lnk"
$WshShell = New-Object -ComObject WScript.Shell
$ShortCut = $WshShell.CreateShortcut($FullLinkFile)
$ShortCut.TargetPath = $FullTarget
$ShortCut.Save()
$WshShell = $null
return "Exec - "+(Split-Path $FullLinkFile -Leaf)+ `
" Created in "+(Split-Path $pathPaste -Leaf)
}
function WriteLog{
param(
$strWrite,
$pathWrite=""
)
$pathThis = $pwd
if( MyTestPath $pathWrite ){ cd $pathWrite }
ExitByCurDrive
$nmLogMoto = Get-ChildItem | where {$_.name -like '*.log'} | `
sort -Property LastWriteTime -Descending | select -First 1
$nmLogNew = (Get-Date -Format "yyMMdd") + '.log'
if([bool]$nmLogMoto -eq $false){
[void](New-Item $nmLogNew)
}else{
[void](MyRename $nmLogMoto $nmLogNew)
}
"$strWrite" | Out-File -Append -FilePath $nmLogNew
Write-Host $strWrite
cd $pathThis
}
function ReadLog{
param(
[string]$path = ".",
[switch]$ReadLastDate
)
#get log-file-name
$nmLog = Get-ChildItem $path -Name | where {$_ -like "*.log"}|sort -Descending |select -First 1
#get file-content
if([bool]$nmLog){
$fullLog = [string](Join-Path $path $nmLog)
$objCont = Get-Content $fullLog
}else{ $objCont = $null }
# read
if($ReadLastDate){
if($objCont -eq $null){
return [datetime]"1900/01/01"
}
for($i = $objCont.Length; $i -ge 0; $i--) {
if(IsDateTime $objCont[$i]){
return [datetime]$objCont[$i]
break
}
}
return [datetime]"1900/01/01"
}
}
function UpdateCopy($pathPaste){
# .logファイルのLastDateより新しいならCopy
ExitByPasteDrive $pathPaste
$dateLast = ReadLog $pathPaste -ReadLastDate
$CI = Get-ChildItem . | select Name,LastWriteTime | sort {$_.LastWriteTime} -Descending
WriteLog "Start UpdateCopy." $pathPaste
$nmsExec =@()
foreach($el in $CI){
if($el.LastWriteTime -gt $dateLast){
if($el.name -notlike '*.log'){
$nmsExec += $el.Name
}
}else{
break
}
}
if($nmsExec.Length -gt 0){
$nmsExec=$nmsExec | sort
foreach($nm in $nmsExec){
$ret = MyCopy $nm $pathPaste
if($ret -like "Exec*"){
WriteLog ($nm +" UpdateCopy") $pathPaste
}
}
}
cd $pathPaste
WriteLog ("Exec UpdateCopy.`r`n" + [String](Get-Date) + "`r`n")
}
###################################