Skrypt systemu Windows do uruchomienia jako partia w celu zamiany znaku na liście nazw plików

2

Mam 4 pliki, jak poniżej:

C:\Documents and Settings\vm\AC R\test

JE.BOS.20130516.CSV
JE.BES.20130516.CSV
KFROPN.SAVEFILE.CSV
KFBAD.SAVEFILE.CSV

W "."nazwie pliku muszę zastąpić "-". Ale rozszerzenie .CSVpowinno pozostać takie samo.

1) Wykonałem poniższe polecenie i dostałem błąd jak poniżej:

for /f "tokens=1*delims=." %%i in ('dir /a-d/b *.*.CSV') do ren "%%~i.%%~j" "%%~i-%%~j"

Błąd:

C:\Documents and Settings\vm\AC R\test>for /f "tokens=1*delims=." %%
i in ('dir /a-d/b *.*.CSV') do ren "%%~i.%%~j" "%%~i-%%~j"
%%i was unexpected at this time.

2) Usunąłem jeden% przed i i wykonałem jak poniżej:

for /f "tokens=1*delims=." %i in ('dir /a-d/b *.*.CSV') do ren "%%~i.%%~j" "%%~i-%%~j"

i otrzymałem błąd, jak poniżej:

C:\Documents and Settings\vmeruga\ACCESS RECS\test>for /f "tokens=1*delims=." %i
 in ('dir /a-d/b *.*.CSV') do ren "%%~i.%%~j" "%%~i-%%~j"

C:\Documents and Settings\vmeruga\ACCESS RECS\test>ren "%JEFFERIES.%BODPOS.20130
516.CSV" "%JE-%BODPOS.20130516.CSV"
The system cannot find the file specified.

C:\Documents and Settings\vmeruga\ACCESS RECS\test>ren "%JEFFERIES.%BODTRADES.20
130516.CSV" "%JE-%BODTRADES.20130516.CSV"
The system cannot find the file specified.

C:\Documents and Settings\vmeruga\ACCESS RECS\test>ren "%KFBAROPN.%SAVEFILE.CSV"
 "%KFOPN-%SAVEFILE.CSV"
The system cannot find the file specified.

C:\Documents and Settings\vmeruga\ACCESS RECS\test>ren "%KFBARTRD.%SAVEFILE.CSV"
 "%KFBARTRD-%SAVEFILE.CSV"
The system cannot find the file specified.
użytkownik225817
źródło
Uważam, że pierwsza próba powinna zadziałać, jeśli umieścisz ją w pliku wsadowym. Aby uruchomić go interaktywnie, zmień wszystkie wystąpienia %%na %.
Scott
@ Scott: Pierwsze polecenie otrzymał od odpowiedzi na poprzednie pytanie . Jest to wyraźnie niepoprawne dla podanych tutaj nazw plików i zastąpi tylko pierwszy okres, wypróbuj go i zobacz.
Karan
@Karan: «Muszę zamienić "."nazwę pliku na "-".» OK, przypuszczam, że może to oznaczać, że chce zastąpić wszystkie kropki (przed rozszerzeniem). Uważam jednak, że pytanie jest dwuznaczne. Zinterpretowałem to w ten sposób, że pierwszy okres był jedynym, który chciał zmienić, a PO nie mówi nic, by to wyjaśnić.
Scott
@Scott: Cóż, zakładam, że opublikował to, ponieważ rozwiązanie, które zastępuje pierwszy okres, nie spełniło oczekiwań. Mimo to masz rację, trochę wyjaśnienia nie zaszkodzi.
Karan
Uważam, że „rozwiązanie, które zastępuje pierwszy okres, nie zrobiło tego, co chciał”, ponieważ wpisał je interaktywnie %%izamiast %i, itd.… --– zobaczyć komunikat o błędzie, który zgłosił.
Scott

Odpowiedzi:

2

Proszę, zapisz następujące jako plik .BAT i uruchom:

@setlocal enabledelayedexpansion&&for /f %%a in ('dir /b *.csv') do @set fn=%%~na&&set fn=!fn:.=-!&&ren "%%a" "!fn!%%~xa"
Karan
źródło
Karan Po uruchomieniu tego skryptu z katalogu testowego działa. Co jeśli chciałbym uruchomić go z dowolnego katalogu / ścieżki. Muszę wspomnieć o nazwie ścieżki w skrypcie! Czy możesz mi powiedzieć, gdzie mam zmodyfikować skrypt, aby określić ścieżkę jako „c: \ test \”
user225817,
@ user225817: Prosty cd /d "drive:\path\to\dir"jak pierwszy wiersz zabierze Cię do katalogu, w którym chcesz uruchomić resztę partii, ale myślę, że już to wymyśliłeś. Możesz zaakceptować odpowiedź, klikając pusty zielony znacznik wyboru po lewej stronie. Zostanie wypełniony po kliknięciu.
Karan
0

spróbuj tego, spójrz na wynik i usuń słowo echo, jeśli jest w porządku:

@echo off & setlocal
cd / d „C: \ Documents and Settings \ vm \ AC R \ test”
dla %% i w (*. *. csv) wykonaj (
    ustaw „fname = %% ~ ni”
    setlocal włączony opóźniony rozwój
    ustaw "nname =! fname:. = -!"
    echo zmień nazwę „! fname! .CSV” „! nname! .CSV”
    endlocal
)
Endoro
źródło
Endoro. Próbowałem powyższego skryptu umieszczając plik wsadowy, nie jestem pewien, czy powinienem umieścić plik wsadowy, czy uruchomić w linii Coomada. Jako plik wsadowy nie widziałem wyników. Dziękujemy za poświęcony czas na ten problem.
user225817