多数のファイルが名前にタイムスタンプが含まれている "名前が変更されました"。バッチの名前を変更する方法が見つかりません。 「Batch Rename Utility」などのバッチの名前変更を使用し、regexコマンドを使用しようとしていますが、コマンドを作成できません。
無効なファイル名は次のとおりです。[130bpm] salsaish (2020_11_04 13_32_49 UTC).wav
ファイルは次のようにする必要があります。[130bpm] salsaish.wav
したがって、削除された文字列は次のようになります(2020_11_04 13_32_49 UTC)
。ただし、これらの文字列は名前が変更されたときに変更することができ、ファイルに特殊文字を含めることができます。
名前をすべて変更する方法はありますか?
答え1
私の場合はSynology
できPerl
ませんrename
。安全上の問題により攻撃面Perl
、デバイスに何も追加しないでください。プラグインがありますが、デフォルトのシェルであるsh
pureを使用できます(sh
リンクbash
):
for i in *.wav; do echo mv -- "$i" "${i% (*}.wav"; done
または置換存在するパラメータ拡張:
for i in *.wav; do echo mv -- "$i" "${i// (*)/}"; done
これはシェルを使用しますパラメータ拡張 望むより:http://mywiki.wooledge.org/BashFAQ/073そしてman bashの「パラメータ拡張」。また見てくださいhttp://wiki.bash-hackers.org/syntax/pe
% (*
右部分を削除することを意味[[:space:]](*
しますglob
。正規表現。
echo
出力が満足のいく場合は削除してください。
答え2
Perlで実装されたプログラム(パッケージの一部であるrename
他のプログラムがあります):rename
util-linux
$ perl-rename -n 's, \(.+?\),,' *
[130bpm] salsaish (2020_11_04 13_32_49 UTC).wav -> [130bpm] salsaish.wav
貪欲ではない方法で、最初の空白と括弧とその間のすべての項目を削除します。新しい名前が必要な名前であることを確認し、-n
実際に名前を変更するには削除してください。
答え3
長く遅れて申し訳ありません。以下は私がPHPで使用しているコードです。
<?php
function getDirContents($dir, &$results = array()) {
$files = scandir($dir);
foreach ($files as $key => $value) {
$path = realpath($dir . DIRECTORY_SEPARATOR . $value);
if (!is_dir($path)) {
$results[] = $path;
} else if ($value != "." && $value != "..") {
getDirContents($path, $results);
$results[] = $path;
}
}
return $results;
}
$dir = getDirContents('./DBM5000');
echo '<table equalcells="1">';
foreach($dir as $file)
{
$good_file = preg_replace("/ \([^)]+\)/","", $file);
$isfile = is_file($good_file);
echo '<tr>';
echo '<td>'.$file.'</td>';
echo '<td>'.$good_file.'</td>';
if(pathinfo($good_file, PATHINFO_EXTENSION))
{
echo '<td>FILE</td>';
rename($file, $good_file);
}
else
{
echo '<td>DIRECTORY</td>';
}
echo '</tr>';
}
echo '</table>';