我重命名爲空文件擴展名使用此命令:批量重命名文件擴展名,包括子目錄
rename *. *.bla
不過,我有幾百個這樣的子文件夾的文件夾,此命令需要我手動導航到每個子文件夾並運行它。
有沒有辦法,我可以從只有一個上級文件夾,其中將包括子文件夾中的所有文件運行命令?
我重命名爲空文件擴展名使用此命令:批量重命名文件擴展名,包括子目錄
rename *. *.bla
不過,我有幾百個這樣的子文件夾的文件夾,此命令需要我手動導航到每個子文件夾並運行它。
有沒有辦法,我可以從只有一個上級文件夾,其中將包括子文件夾中的所有文件運行命令?
@echo off
for /f "tokens=* delims= " %%i in ('dir /b/s/A-d') DO (
if "%%~xi" == "" rename "%%~fi" "%%~ni.bla"
)
感謝@Wadih M. Find and rename files with no extension?
您可以輕鬆地做到這一點,很多事情與Perl模塊,File::Find。
#!perl
use strict;
use warnings;
use File::Find;
my $extension = 'bla';
my $directory = '/tmp/test';
print "Files renamed:\n";
find(\&wanted, $directory);
sub wanted {
return if /\./;
return unless -f $File::Find::name;
if (rename($File::Find::name, "$File::Find::name.$extension")) {
print " $File::Find::name -> $File::Find::name.$extension\n";
}
else {
print " Error: $! - $File::Find::name\n";
}
}
,這將讓你與在名稱中使用空格輸入迪爾斯。 (注意雙%是批處理文件,使用單個%的命令行。)
for /f "tokens=* delims= " %%a in ('dir /b /ad /s') do rename "%%a\*." "*.bla"
給予我不承認爲內部或外部命令錯誤。使用單個%進行命令行測試。看起來非常接近,但它只是沒有做到。 – Alan 2009-06-22 04:54:36
試試這個
for /R c:\temp %I in (*.) DO Echo rename %I "%~nI.bla"
您可以使用for
遍歷子目錄:
for /d %x in (*) do pushd %x & ren *. *.bla & popd
當使用它從一個批處理文件,你需要的%
跡象翻番:
for /d %%x in (*) do pushd %%x & ren *. *.bla & popd
for /r c:\path\ %G in (*.) do ren "%G" *.bla
使用查找和xargs的基本名稱,並會使表達式更容易閱讀
準備這樣一個重命名的shell腳本(校正處理多個文件)
#!/bin/sh
if [ $# -lt 3 ]
then
echo "usage: rename.sh sufold sufnew file1 (file2 file3 ...) "
exit
fi
sufold=$1
sufnew=$2
shift
shift
for f in $*
do
echo "to mv " $f `dirname $f`"/"`basename $f $sufold`$sufnew
mv $f `dirname $f`"/"`basename $f $sufold`$sufnew
done
然後你可以調用它到每個文件匹配d您的條件,包括find命令
find . -name "*." | xargs rename.sh "." ".bla"
更常見的樣本遞歸文件夾搜索
find . -name "*.htm" | xargs rename.sh ".htm" ".html"
屬於對serverfault – 2009-06-22 04:38:29
/我覺得它屬於這裏太 – jrharshath 2009-06-22 04:49:14