Skype 轉到 Tesms 之後沒花完的數點怎麼辦 (其實還能用)
兩個方法一個是從 teams 裡面進去,有個撥號鍵盤可以打
另一個是直接存取網址 (teams也是從網址打的)
https://calling.web.skype.com/
這裡進去有個簡易版本 skype 可以用
本站建議搭配 Hover Zoom+ chrome 擴充套件,可自動放大圖片
( 站內文介紹: https://goo.gl/BnBSGa )
網站搜索不是很好用建議使用google底下括號內是範例,整串打進google搜索內;
[ site:https://charlottehong.blogspot.tw/ 你要搜索的內容 ]
兩個方法一個是從 teams 裡面進去,有個撥號鍵盤可以打
另一個是直接存取網址 (teams也是從網址打的)
https://calling.web.skype.com/
這裡進去有個簡易版本 skype 可以用
irm 'raw.githubusercontent.com/hunandy14/Invoke-Retry/main/Invoke-Retry.ps1'|iex
Invoke-Retry {
Get-Content "non-existing-file.txt"
} -FinallyScriptBlock {
Write-Host " 🔄 Running Cleanup"
} -MaxRetries 3 -DelaySeconds 1 -ErrorAction Stop
這是一個簡單的試錯,自動重試3次,每次1秒,然後最後面的 ErrorAction Stop 建議是設定一下避免出現預期之外的事情,內建很多函式只報錯並不會被 try 擷取到。
Invoke-Retry {
Get-Content "non-existing-file.txt"
} -FinallyScriptBlock {
Write-Host " 🔄 Running Cleanup"
} -RetryableErrors @(
[System.Management.Automation.ItemNotFoundException],
[System.IO.FileNotFoundException],
[System.IO.DirectoryNotFoundException]
) -MaxRetries 3 -DelaySeconds 1 -ErrorAction Stop
可以通過 RetryableErrors 指定特定錯誤才重試
要驗證傳輸到底有沒有傳對用的函式
# 獲取遠端檔案的雜湊值
function Get-RemoteFileHash {
[CmdletBinding()]
param (
# 遠端檔案路徑
[Parameter(Mandatory, ValueFromPipeline)]
[string]$Path,
# 遠端登入資訊
[Parameter(Mandatory)]
[string]$RemoteLoginInfo,
# 遠端私鑰
[Parameter(Mandatory)]
[string]$IdentityFile,
# 遠端作業系統
[Parameter(Mandatory)]
[ValidateSet('Windows', 'Linux')]
[string]$RemoteOS
) begin {
# 檢查私鑰是否存在
if (-not (Test-Path $IdentityFile)) {
Write-Error "Cannot find path '$IdentityFile' because it does not exist."
}
# 定義不同作業系統的雜湊命令
$hashCommands = @{
'Windows' = "powershell `"(Get-FileHash -Path ([WildcardPattern]::Escape('$Path')) -Algorithm SHA256 -EA 1).Hash`""
'Linux' = "sha256sum '$Path' 2>&1 >/dev/null && sha256sum '$Path' | cut -d' ' -f1 | tr '[:lower:]' '[:upper:]'"
}
# SSH 連線參數設定
$sshParams = @(
'-oBatchMode=yes'
"-oIdentityFile=$IdentityFile"
$RemoteLoginInfo
)
} process {
# 執行遠端雜湊命令
$hash = & ssh @sshParams $hashCommands[$RemoteOS] 2>&1
# 檢查 ssh 命令是否成功
if ($LASTEXITCODE -ne 0) {
Write-Error "ssh command failed: $hash"
return $null
}
# 檢查雜湊值格式是否正確 (SHA-256 應為 64 個十六進制字符)
if (-not ($hash -match '^[A-F0-9]{64}$')) {
Write-Error "The hash value '$hash' returned from command '$hashCommand' is not a valid SHA-256 format"
return $null
}
return $hash
}
}
使用範例
Get-RemoteFileHash "/home/chg/work/Tester.bats" `
-RemoteLoginInfo "chg@192.168.3.53" `
-IdentityFile "${env:USERPROFILE}\.ssh\id_ed25519" `
-RemoteOS "Linux"
執行完會自動返回遠端檔案的哈希值,再來比較本地端即可知道是否一致了。
如果是要從 sftp 指令獲取位址可以參考這個
# 解析 SFTP 命令
function ParseSftpCommandPath {
[CmdletBinding()]
param (
[Parameter(ValueFromPipeline)]
[string]$CommandText
)
process {
# 跳過空行和註解
if (-not ($CommandText -match '\S') -or $CommandText -match '^\s*#') { return }
# 解析命令行
$tokens = [regex]::Matches(
$CommandText.Trim(), '"[^"]+"|[^\s"]+'
).Value.Trim('"')
# 獲取遠端檔案路徑
if ($tokens[0] -in 'get','put') {
$paths = $tokens[1..($tokens.Count-1)].Where({ $_ -notmatch '^-' })
$idx = @{
'get' = @{local=-1; remote=0}
'put' = @{local=0; remote=-1}
}[$tokens[0]]
[PSCustomObject]@{
Command = $tokens[0]
LocalPath = $paths[$idx.local]
RemotePath = $paths[$idx.remote]
}
}
}
} # "get /home/chg/work/Tester.bats Tester.bats" | ParseSftpCommandPath
部落格文章
關於檔案的 修改時間 和 存取時間有什麼差別可以看這篇站內文
代碼開源在這裡: hunandy14/FileDateEditor
快速使用
irm bit.ly/4gkzM5D|iex; Set-FileDate -File "test\file.txt" "2025-2-4"
詳細功能
# 載入函式
irm bit.ly/4gkzM5D|iex;
# 建立日期
Get-Item "test\file.txt" | Set-FileDate "2025-2-4" -Creation
# 修改日期
Get-Item "test\file.txt" | Set-FileDate "2025-2-4" -Write
# 存取日期
Get-Item "test\file.txt" | Set-FileDate "2025-2-4" -Access
# 日期字串
Get-Item "test\file.txt" | Set-FileDate "2025-02-04" -Format "yyyy-MM-dd"
生成測試檔案
irm bit.ly/4gkzM5D|iex; 1..10 | ForEach-Object{
$idx=$_.ToString('00')
New-Item -ItemType File -Path "file_2025-02-$idx.txt" |
Set-FileDate "2025-02-$idx"
}
最大的分支雖然都是由PR合併的,但是開發的次要主線規模不大太大還是有可能會讓開發者自己管理的
在這種情況下每當做好功能之後會合併回去還得退回,檔案會經過一次大洗牌,這邊提供一個可以不更動檔案的方式合併到分支
為什麼會洗牌是因為git並不提交 merage to 他只有 merage from,就注定你只能切過去不然不要合
解法是還是得造一個工作區,但是不是當前的目錄,而次第二個工作樹,在次要的工作樹合併這件事情就解決了
大概需要底下幾個流程
# 進入主工作樹目錄
cd "Z:/my-project"
# 新增臨時工作樹,檢查出目標分支
git worktree add "Z:/my-project-dev" dev
# 在臨時工作樹中進行合併
cd "Z:/my-project-dev"
git merge fix
# 合併完成後,回到主工作樹刪除臨時工作樹
cd "Z:/my-project"
git worktree remove "Z:/my-project-dev"
對就是單純的在檢出一個工作樹就行了,不過做完記得要刪除因為那個工作樹是會佔用分支的,會導致你的主目錄切不過去。
要搬移的資料庫檔案在C裡面,比較快的方法是打下面的指令可以查出所有表儲存位置
USE master;
GO
SELECT
db_name(database_id) AS DatabaseName,
type_desc AS FileType,
physical_name AS FilePath
FROM sys.master_files
ORDER BY db_name(database_id), type_desc;
查出來之後先儲存下來等一下要一個一個手動掛回來會比較方便
再來需要停止 SQLSERVER 服務,停掉之後就可以直接開始搬檔案了
搬完之後由於服務啟動至少需要下面這三個東西,這個手動改一下
(或是不想改下圖這三個就不要搬,讓它保持在C曹搬你自己創建的就好)
這三個關鍵檔案改好就可以啟動了
啟動後會是一個全空的DB,用下面指令一個一個掛回來
下面的範例是把資料庫名稱 CHG 掛回來的指令
(把所有CHG改成你的資料庫名稱即可)
USE master;
GO
ALTER DATABASE CHG
MODIFY FILE (NAME = 'CHG', FILENAME = 'D:\MSSQL\DATA\CHG.mdf');
GO
ALTER DATABASE CHG
MODIFY FILE (NAME = 'CHG_log', FILENAME = 'D:\MSSQL\DATA\CHG_log.ldf');
GO
ALTER DATABASE CHG SET ONLINE;
GO
數量很多的話自己寫個腳本執行吧
下面是寫成動態 TSQL 的範例
-- 設置基礎路徑
DECLARE @BasePath NVARCHAR(255) = 'D:\MSSQL\DATA\';
-- 資料庫清單
DECLARE @DatabaseList TABLE (DatabaseName NVARCHAR(128));
INSERT INTO @DatabaseList VALUES
('CHG1'),
('CHG2'),
('CHG3');
-- 定義變數
DECLARE @DatabaseName NVARCHAR(128);
DECLARE @MdfPath NVARCHAR(255);
DECLARE @LdfPath NVARCHAR(255);
DECLARE @Sql NVARCHAR(MAX);
-- 確保基礎路徑結尾無斜線
IF RIGHT(@BasePath, 1) = '\'
SET @BasePath = LEFT(@BasePath, LEN(@BasePath) - 1);
-- 開始遍歷資料庫清單
DECLARE db_cursor CURSOR FOR
SELECT DatabaseName FROM @DatabaseList;
OPEN db_cursor;
FETCH NEXT FROM db_cursor INTO @DatabaseName;
WHILE @@FETCH_STATUS = 0
BEGIN
-- 生成 MDF 和 LDF 的路徑
SET @MdfPath = @BasePath + '\' + @DatabaseName + '.mdf';
SET @LdfPath = @BasePath + '\' + @DatabaseName + '_log.ldf';
-- 修改 MDF 檔案位置
SET @Sql =
'ALTER DATABASE ' + QUOTENAME(@DatabaseName) +
' MODIFY FILE (NAME = ''' + @DatabaseName + ''', FILENAME = ''' + @MdfPath + ''')';
EXEC sp_executesql @Sql;
-- 修改 LDF 檔案位置
SET @Sql =
'ALTER DATABASE ' + QUOTENAME(@DatabaseName) +
' MODIFY FILE (NAME = ''' + @DatabaseName + '_log'', FILENAME = ''' + @LdfPath + ''')';
EXEC sp_executesql @Sql;
-- 將資料庫設為 ONLINE
SET @Sql =
'ALTER DATABASE ' + QUOTENAME(@DatabaseName) + ' SET ONLINE';
EXEC sp_executesql @Sql;
-- 繼續處理下一個資料庫
FETCH NEXT FROM db_cursor INTO @DatabaseName;
END;
-- 關閉並釋放資源
CLOSE db_cursor;
DEALLOCATE db_cursor;
裡面亂碼最後查到可以從 gitconfig 中設置,可以直接設置在全域也可以直接設置在專案資料夾,這邊如果你不確定怎麼做的話跟著底下教學儲存在專案設置就行。
為什麼會造成這個原因是,git 雖然是用 utf8 儲存,但是讀取的時候是根據電腦語言編碼解析的,也就是在中文 Windows 上預設會被使用 big-5 解碼。
關鍵的設置指令是
[gui]
encoding = utf-8
直接貼到專案資料夾中 .git\config 就可以起作用了
或是執行下面的指令 (消除 —local 會儲存到使用者全域設定)
git config --local gui.encoding utf-8
然後透過下面的指令查看
# Linux
git conig --local --list | grep gui.encoding
# pwsh
git config --local --list | Select-String "gui.encoding"
再重新打開 gitk 就可以正確的識別了