Z TC jest możliwość zaprogramować cokolwiek niezłożonego i uruchomić z paska przycisków lub skonfigurować skrót-klawiaturowy. Można zautomatyzować jednym kliknięciem, przykładowo dodanie lub wykluczenie rozszerzenia pliku do wykrywania przez wtyczki, w tym wiele innych funkcjonalności (jak przestawień dowolnej wtyczki). W między czasie mogą pojawić się różne*
# PowerShell script adding or remove file extension for the plugin
<#
Argumenty uruchomienia oddzielone spacją:
argument 1 to ścieżka do pliku konfiguracyjnego TC np. "C:\path\totalcmd.ini"
argument 2 to nazwa wtyczki wg pliku .ini (zapis w "")
argument 3 to rozszerzenie pliku do wykrywania przez określoną wtyczkę (może być w '')
argument 4 opcjonalny - 1 oznacza dodanie rozszerzenia, a bez podania wartości to wykluczenie rozszerzenia
#>
# Przypisanie nazwy pliku do zmiennej plik1
$plik1 = $args[0]
# Przypisanie wartości parametru 2 do zmiennej plug
$plug = $args[1]
# Przypisanie wartości parametru 3 do zmiennej extP
$extP = $args[2]
# Sprawdzenie czy parametr 4 został podany i przypisanie wartości do zmiennej klucz1
if ($args[3]) {
$klucz1 = $args[3]
} else {
$klucz1 = 0
}
Try {
# Sprawdzenie czy plik istnieje
$fileExists = Test-Path $plik1
if (-not $fileExists) {
throw "Błędne dane: Plik $plik1 nie istnieje."
}
# Tworzenie kopii zapasowej pliku
$backupFile = $plik1 + ".cop"
Copy-Item $plik1 $backupFile
# Otwarcie pliku do odczytu
$fileContent = Get-Content $plik1
# Szukanie tekstu ze zmiennej plug i zapamiętanie pierwszego znaku w linii
$znalezionaLinia = $false
foreach ($line in $fileContent) {
if ($line.Contains($plug)) {
$znak1 = $line.Substring(0, 1)
$znalezionaLinia = $true
break
}
}
if (-not $znalezionaLinia) {
throw "Nie znaleziono tekstu $plug w pliku $plik1."
}
# Tworzenie nowej zmiennej start1 ze znak1 & detectP
$start1 = $znak1 + "_detect="
# Kontynuowanie szukania w pliku tekstu ze zmiennej start1 i zapamiętanie numeru linii
$znalezionaLinia2 = $false
$numerLinii = 0
foreach ($line in $fileContent) {
$numerLinii++
if ($line.Contains($start1)) {
$znalezionaLinia2 = $true
break
}
}
if (-not $znalezionaLinia2) {
throw "Nie znaleziono tekstu $start1 w pliku $plik1."
}
# Wyświetlenie prośby o potwierdzenie i naciśnięcie Enter
Write-Host "Prośba potwierdzenia kontynuowania - nacisnąć Enter."
$confirmation = Read-Host
# Zastąpienie ostatniego znaku w zapamiętanej linii tekstem ze zmiennej extP
if ($confirmation -eq "" -and $klucz1 -eq 1) {
$lineToReplace = $fileContent[$numerLinii - 1]
$lineToReplace = $lineToReplace.Substring(0, $lineToReplace.Length - 1) + $extP
$fileContent[$numerLinii - 1] = $lineToReplace
}
# Zastąpienie szukanego tekstu w zapamiętanej linii stałą tekstową ( albo np. const4='"' )
if ($confirmation -eq "" -and $klucz1 -eq 0) {
$lineToReplace = $fileContent[$numerLinii - 1]
$lineToReplace = $lineToReplace.Replace($extP, '"')
$fileContent[$numerLinii - 1] = $lineToReplace
}
# Zapisanie zmienionego pliku lub i przekodowanie
$fileContent | Set-Content $plik1 #-Encoding Unicode
Write-Host "Zakończono pomyślnie."
} catch {
Write-Host "Błąd: $($_.Exception.Message)"
}
# usage: ./this.ps1 ini plugin EXT [arg4]
# example: powerShell .\auto-ext "totalcmd.ini" "=%COMMANDER_PATH%\PLUGINS\WDX\SignatureInfo\SignatureInfo.wdx" ' | "PS1""' 1
*W Windows™ zastąpiono terminalem tradycyjną konsole. PowerShell to domyślna powłoka. Może być mankamentem to, że zawiera tłumaczenie angielskie na np. francuski, a standardowo nie ma polskiego. Spora zaleta skryptu to potencjał generowania dość precyzyjnego kodu przez AI i to od algorytmu napisanego po polsku. Twórcy systemu opracowują badania nad sztuczną inteligencją nakładem miliardów $.
Do znalezienia są moduły lub aplikacja, która przetwarza plik .ps1 na wykonywalny plik .exe
70,73d69
< # Wyświetlenie prośby o potwierdzenie i naciśnięcie Enter
< Write-Host "Prośba potwierdzenia kontynuowania - nacisnąć Enter."
< $confirmation = Read-Host
<
75c71
< if ($confirmation -eq "" -and $klucz1 -eq 1) {
---
> if ($klucz1 -eq 1) {
82c78
< if ($confirmation -eq "" -and $klucz1 -eq 0) {
---
> if ($klucz1 -eq 0) {
* Aby wprowadzić poprawki z tzw. łatki , można użyć programu WinMerge i zrobi to automatycznie albo dokonać manualnie:
linie z liczbami tylko, do pominięcia
< znak mniejszości (wskazuje na zewnątrz bardziej) na początku to linia, która jest do usunięcia w skrypcie
> znak większości (wskazuje do wewnątrz bardziej) na początku to linia, która jest do zastąpienia w miejsce usuniętej, przed ---
# np. .\at-r plik r
<#
parametr 1 to ścieżka do pliku (np. CmdLHist.ini) , który chcesz sprawdzić i zmienić atrybut
parametry 2 to wartość r (wielkość litery bez znaczenia) dla zmiany atrybutu pliku na tylko odczyt
lub nie podany parametr w przypadku ustawienia atrybutu pliku nie tylko z odczytem
#>
param(
[Parameter(Position=0)]
[string]$sciezkaDoPliku="",
[Parameter(Position=1)]
[string]$Parametr=""
)
# Sprawdzenie istnienia pliku
if ($sciezkaDoPliku -ne "" -and (Test-Path -Path $sciezkaDoPliku -PathType Leaf)){
# ...
}
else {
"nie podano właściwej ścieżki do pliku" ; exit
}
# Sprawdzanie atrybutu pliku
$atrybuty = (Get-Item $sciezkaDoPliku).Attributes
$jestTylkoOdczyt = $atrybuty -band [System.IO.FileAttributes]::ReadOnly
# wykonanie w zależności od parametru
if ($parametr -eq "r") {
Write-Host "Wykonywanie operacji dla parametru 'r'..."
# kod operacji dla parametru 'r'
# Sprawdzenie, czy plik ma ustawiony atrybut tylko do odczytu
if ($atrybuty -band [System.IO.FileAttributes]::ReadOnly) {
Write-Host "Plik ma już ustawiony atrybut tylko do odczytu."
}
else {
# Zmiana atrybutu pliku na tylko do odczytu
Set-ItemProperty -Path $sciezkaDoPliku -Name IsReadOnly -Value $true
Write-Host "Zmieniono atrybut pliku na tylko do odczytu."
}
} elseif ($parametr -eq "") {
Write-Host "Wykonywanie operacji dla pustego parametru..."
# kod operacji dla pustego parametru
#Jeśli plik ma ustawiony atrybut tylko do odczytu, zmienia atrybut na do zapisu
if ($jestTylkoOdczyt) {
$plik = Get-Item -Path $sciezkaDoPliku
$plik.IsReadOnly = $false
Write-Host "Atrybut pliku został zmieniony na do zapisu."
} else {
Write-Host "Atrybut pliku nie jest ustawiony tylko do odczytu."
}
} else {
Write-Host "Błędny parametr 2! Możliwe wartości to 'r' lub '' (pusty)."
# Tutaj można umieścić kod w przypadku podania nieprawidłowego parametru
exit
}
Skrypt restartujący TC. W przypadku m.in. UFM, ścieżka jest do skrótu .lnk pliku .exe : restart-tc