Jak utworzyć skrypt „dropletu” w Win7, który uruchamia zadanie Notepad ++ na pliku CSV

0

Niedawno zadałem pytanie, jak wykonać porządne małe zadanie „Znajdź i zamień” w moich plikach multimedialnych baz danych CSV (zadanie, które muszę codziennie wykonywać w pracy). Tutaj ktoś odpowiedział na pytanie , czy ktoś jest zainteresowany szczegółami.

Chcę teraz móc po prostu przeciągnąć i upuścić mój plik CSV na kroplę na pulpicie, która wykonuje zadanie Znajdź i zamień Notepad ++ szybko i łatwo, więc mogę przekazać to zadanie większej liczbie młodszych członków personelu, gdy jestem z dala.

Pytanie:

Jak utworzyć kroplę w Win 7, która uruchamia następującą komendę „Znajdź i zamień” dla dowolnego pliku CSV upuszczonego na nią?

wprowadź opis zdjęcia tutaj

Tekst:

Znajdź co:

^([^,]*,(\d\d)_[^,]*,[^,]*)(?<!_\d\d),

Zamienić:

$1_$2,

Sprawdź: owiń się

Sprawdź: wyrażenie regularne

Uruchom: zamień wszystko

Wyobrażam sobie, że może to być skrypt wsadowy (lub dowolny skrypt tego rodzaju), który otrzyma mój plik CSV jako plik wejściowy, po prostu przeciągając go na skrypt.

Myles
źródło
Czym dokładnie jest „kropla”? Czy to to samo co skrót?
Berend
Cześć, mam na myśli skrypt, który może odbierać plik wejściowy, przeciągając i upuszczając na nim mój plik CSV. Myślę, że może to być skrypt wsadowy, który odbierałby plik „% ~ 1” i otwierał się w Notepad ++, aby uruchomić polecenie, o które prosiłem, jednak tak naprawdę nie mam wystarczającej wiedzy w tej dziedzinie, aby wiedzieć, co najlepiej zrobić tutaj jest? zmienię moje pytanie, aby wyjaśnić. Z góry dziękuję.
Myles,
Rozumiem. O ile mi wiadomo Notepad ++ nie ma takiej opcji ( docs.notepad-plus-plus.org/index.php/Command_Line_Switches ), więc może być konieczne użycie innego narzędzia, takiego jak AutoIt lub wersja Windows sed. Nie jestem ekspertem od żadnego z nich.
Berend
Jestem otwarty na wszelkie sugestie. Dziękujemy wszystkim za wkład w to!
Myles,
Nie wiem, czy funkcję „Znajdź i zamień” Notepad ++ można wywołać z wiersza poleceń, ale zapisałem, co muszę zrobić jako makro w Notepad ++. Nie jestem pewien, czy te makra mogą być wywoływane w wierszu poleceń?
Myles,

Odpowiedzi:

1

Windows 7 jest dostarczany z PowerShell v2, który obsługuje Wyrażenia regularne z negatywnym wyglądem.

Jeśli poprawnie interpretuję RegEx , chcesz zastosować dwie cyfry 99_prowadzące do drugiego pola, aby prześledzić także trzecie pole, pod warunkiem, że nie ma jeszcze _99liczby. I pozostaw pozostałe linie / resztę linii bez zmian.

Plik wsadowy służący jako cel upuszczania (obsługuje także wiele plików):

:: SO_1352996.cmd
@Echo off
:Loop
If "%~1" equ "" goto :Eof
If not exist "%~1" (shift & goto :Loop)
Ren "%~f1" "%~n1_Original%~x1"
:: Use PowerShell as a tool to do the replace.
Powershell -NoP -C "(Get-Content '%~dpn1_Original%~x1') -replace '^([^,]*,(\d\d)_[^,]*,[^,]*)(?<!_\d\d),','$1_$2,' | Set-Content '%~f1'
Shift
Goto :Loop

plik.csv wcześniej

test,12_blah,blubb,anything
test,34_blah,blu_34,doesn't matter
test,56_foo,bar,nevermind

i po upuszczeniu na powyższą partię.

test,12_blah,blubb_12,anything
test,34_blah,blu_34,doesn't matter
test,56_foo,bar_56,nevermind

Oryginalny plik jest zapisywany z dodatkowym rozszerzeniem .bak

LotPings
źródło
Cześć, LotPings, właśnie skopiowałem wklejony kod i zapisałem jako skrypt wsadowy. Kiedy próbuję przeciągnąć upuszczając plik csv, otwiera okno cmd i powtarza następujące „Istnieje zduplikowana nazwa pliku lub pliku nie można znaleźć”. Z góry dziękuję za pomoc!
Myles,
Może zmodyfikowany lub oryginalny plik można zapisać za pomocą „_ORIGINAL” lub „_MODIFIED”? Nie wiesz, jak zmienić skrypt, aby to zrobić.
Myles
1
Przepraszamy, brakuje drugiej zmiany w drugiej linii, Poprawiono.
LotPings,
1
Włączyła _Originaldodatek do nazwy pliku
LotPings
Wydaje się, że zadziałało to w modyfikacji pliku bazy danych. Musiałem jednak skopiować plik na pulpit, aby to zrobić, ponieważ okno poleceń mówi mi „Ścieżki UNC nie są obsługiwane”. Miejsce przechowywania wszystkich plików CSV to lokalizacja sieciowa. Jakiś sposób na to? Nie jestem zbyt zdenerwowany, jeśli jest to zbyt trudne do rozwiązania.
Myles,