1

私はcurディレクトリとサブディレクトリのすべてのファイルにプレフィックスを追加しようとしていますが、次のコードを使用してこれに成功しています:

@echo off
pushd "D:\z.Temp\Test\"
for /r %%j in (*) do (
   rename "%%j" "[nilesh.uk.to]-%%~nxj"
)
popd

しかし、次のような特定のファイルタイプのプレフィックスを追加しようとすると:

@echo off
pushd "D:\z.Temp\Test\"
for /r %%j in (*.html *.js) do (
   rename "%%j" "[nilesh.uk.to]-%%~nxj"
)
popd

動作しますが、次のような出力が得られます。

demo1.html  -->  [nilesh.uk.to]-[nilesh.uk.to]-demo1.html
demo2.html  -->  [nilesh.uk.to]-demo2.html
demo3.html  -->  [nilesh.uk.to]-demo3.html

demo1.js  -->  [nilesh.uk.to]-[nilesh.uk.to]-demo1.js
demo2.js  -->  [nilesh.uk.to]-demo2.js
demo3.js  -->  [nilesh.uk.to]-demo3.js

ここで、最初の各ファイルにプレフィックスを2回追加します

そして、nilesh.uk.to から [] を削除すると完全に機能しますが、プレフィックスとして [nilesh.uk.to] が必要です frendz が何をすべきか教えてください...

4

2 に答える 2

1

問題は、名前が変更されたファイルが見つかり、再度名前が変更される可能性があることです。

ECHO rename "%%j" "[nilesh.uk.to]-%%~nxj"コードに を追加すると、次のようなものが表示されます

名前を「C:\temp\bracket\demo1.txt」「[nilesh.uk.to]-demo1.txt」に変更し、名前を「C:\temp\bracket\demo2.txt」「[nilesh.uk.to]-demo2.txt」に変更します。 txt" 名前を変更する "C:\temp\bracket\demo3.txt" "[nilesh.uk.to]-demo3.txt" 名前を変更する "C:\temp\bracket[nilesh.uk.to]-demo1.txt" "[ nilesh.uk.to]-[nilesh.uk.to]-demo1.txt"

FORしたがって、ループが各ファイルを 1 回だけ取得するように強制する必要があります。

あなたはそれをに変更することができます

for /F "delims=" %%j in ('dir /s /b *.html') do (
....

dir /s /b *.html最初の名前変更コマンドが実行される前に が完全に実行されるため、これは機能します。

于 2013-10-18T06:16:23.297 に答える
0

わかりませんが推測してみます。私はそれが良い推測だと信じるいくつかの理由があります。角かっこ (()) かっこを削除し、コマンドを 1 行に入力します。

それでもスクリプトが機能しない場合は、詳しく調べます。

于 2013-10-18T06:09:09.500 に答える