2

次のような rename.txt という名前のテキスト ファイルがあります。

34aa85ff2fb46b29fba2283a7b889480306295.flv|بسوی-زیبایی.flv
bb32ca4604217660ab7b6df3938cd0df306294.flv|صدای-تو.flv
b4b802c0182ebfd4fbba9c5ad2ab3904306286.flv|بسوی-حق.flv

bulk rename utility左側の flv ファイルの名前を|右側の対応するものに変更していたとき:

一括名前変更ユーティリティ scshot

一括名前変更の結果

次に、バッチファイルを使用してファイルの名前を変更しようとしましたが、cmd で同じ問題が発生しました。

@echo off
for /f "tokens=*" %%a in (rename.txt) do (
  echo %%a
)
pause

コマンド出力:

コマンド出力

注:Windowsで手動でファイルの名前を変更できます:

期待される結果

どうすれば期待される結果を得ることができますか?

4

2 に答える 2

1

Windows は UTF-8 を使用せず、UTF-16LE を使用します。入力ファイルをトランスコードします。

于 2012-09-01T15:07:15.223 に答える
1

以下は私のために働いた:

@ECHO OFF
CHCP 65001
FOR /F "tokens=1,2 delims=|" %%a IN (rename.txt) DO (
  RENAME "%%a" "%%b"
)

rename.txtテキスト ファイル ( )の先頭に UTF-8 署名 (バイト オーダー マーク、BOMとも呼ばれます) が含まれていないことを確認してください。これは、コマンドが文字として処理しようとし、最初のファイルの名前に付加するためです。その結果、最初のファイルの名前は変更されません (ただし、他のすべてのファイルは変更されます)。FOR /F

BOM を取り除くことができない場合は、名前を含む他の行が「クリーン」なままである間、BOM がその行にとどまるように、最初に空の行を入れてください。その空行を追加し、上記のスクリプトを変更しない場合、空行を処理しようとするとエラーが発生します。問題になることはありませんが、削除したい場合は、次のようにすることができます。

@ECHO OFF
CHCP 65001
FOR /F "tokens=1,2 delims=|" %%a IN (rename.txt) DO (
  IF NOT "%%b" == "" RENAME "%%a" "%%b"
)
于 2012-09-01T18:07:23.747 に答える