ファイル名のリスト内の文字を置き換えるバッチとして実行するWindowsスクリプト


2

以下の4つのファイルがあります。

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

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

"."ファイル名をに置き換える必要があります"-"。ただし、拡張子.CSVは同じままにする必要があります。

1)以下のコマンドを実行しましたが、次のようなエラーが表示されました。

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

エラー:

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)iの前に1%を削除し、次のように実行しました。

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>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.

バッチファイルに入れた場合、最初の試行が機能するはずです。対話的に実行するには、出現するすべてをに変更%%%ます。
スコット

@スコット:彼は前の質問への回答から最初のコマンドを得ました。ここで提供されるファイル名は明らかに間違っており、最初のピリオドのみを置き換えて、試してみてください。
カラン

@Karan:« "."ファイル名を"-"。に置き換える必要があります。OK、彼はすべてのピリオド(拡張子の前)を置き換えることを意味すると考えられます。しかし、私は質問が曖昧であることを提出します。私は、最初の期間が彼が変えたいと思った唯一の期間であり、OPがそれを明確にすることを何も言わないことを意味すると解釈しました。
スコット

@Scott:最初の期間を置き換えるソリューションは彼が望んだことをしなかったので、彼はこれを投稿したと仮定しています。それでも、あなたは正しい、少し明確化しても害はないだろう。
カラン

「最初の期間を置き換えるソリューションは、彼が望んだことをしなかった」と信じています。なぜなら、彼は…などの%%i代わりにインタラクティブにタイプしたから%iです。
スコット

回答:


2

ここで、次を.BATファイルとして保存して実行します。

@setlocal enabledelayedexpansion&&for /f %%a in ('dir /b *.csv') do @set fn=%%~na&&set fn=!fn:.=-!&&ren "%%a" "!fn!%%~xa"

カラン。このスクリプトをテストディレクトリから実行すると動作します。任意のディレクトリ/パスから実行する場合はどうなりますか。スクリプトにパス名を明記する必要があります!あなたはここで、iのようにパスを指定するためのスクリプトを修正しない私に教えてくださいすることができます「C:\テスト\」
user225817

@ user225817:cd /d "drive:\path\to\dir"最初の行のように単純なため、残りのバッチを実行するディレクトリに移動できますが、すでにわかっていると思います。左側の空の緑色のチェックマーククリックすると、回答受け入れることができます。クリックすると塗りつぶされます。
カラン

0

これを試して、出力を見て、echoOKなら単語を削除してください:

@echo off&setlocal
cd / d "C:\ Documents and Settings \ vm \ AC R \ test"
(%.i in(*。*。csv)do(
    「fname = %%〜ni」を設定します
    setlocal enabledelayedexpansion
    「nname =!fname:。=-!」を設定します
    echo rename "!fname!.CSV" "!nname!.CSV"
    エンドローカル
)

エンドロ。上記のスクリプトをバッチファイルに入れてみましたが、バッチファイルに入れるか、クーマッドラインで実行するかはわかりません。バッチファイルとして、結果を見ることができませんでした。この問題についてお時間をいただきありがとうございます。
user225817
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.