2016-04-22 14 views
0

奇妙なことが起こっている。 私が作業していたプロジェクトの名前変更バッチファイルを数年前に(StackOverflowを含むさまざまな場所から多くの助けを借りて)まとめました。 一部のファイルの名前を変更し、親フォルダの最初の5文字(「12345 - サイト」など)の接頭辞を付けます。 私は数ヶ月間BATファイルを使用していませんでしたが、今は必要ですが、正しく動作していません。突然BATの名前を変更すると正しく動作しない

ファイルの名前は変更されていますが、最初の5文字ではなく親フォルダ全体が使用されています。私は別のPCでそれをテストし、以前に働いたフォルダで実行しました。

これはなぜ起こるのか、それを修正する方法、または同じ結果を得るためにバッチファイルに追加できるものはありますか?

私は完全な初心者であり、最初のバッチファイルを試行錯誤し、ウェブ上の同様のバッチファイルリクエストから切り取りて貼り付けることによって、多くの夜を過ごしました。

私の現在のコード:

for %%z in ("%cd%") do (
for %%a in ("%%~dpz%\.") do (
for /f "delims=" %%i in ('dir /b /a-d *.pdf,*.xlsx,*.docx,*.xlsm') do move "%%i" "%%~nxz %%i")) 
+2

「最初の5文字」に短縮できるコードはありません。これまでに行ったことがあれば、別のバッチファイルでした。 – Stephan

+0

私のオリジナルのように見えるのは、その後書かれています。 :(これは最初の5文字を​​抽出する方法はありますか? – Legg1979

+1

バッチの意図がわかりません。最初のFORループは現在のディレクトリの値に対して1回だけ実行する必要があります。 2番目のFORはまったく使用されず、最初の%zインデックスを使用して繰り返します。最初の5文字を​​抽出する値は何ですか? –

答えて

3

これはあなたのために働く必要があります。

for %%z in ("%cd%") do (
    for %%a in ("%%~dpz%\.") do (
     for /f "delims=" %%i in ('dir /b /a-d *.pdf,*.xlsx,*.docx,*.xlsm') do call :renameStuff "%%i" "%%~nxz" 
     ) 
    ) 
goto :eof 

:renameStuff 
set "originalName=%~1" 
set "parentFolder=%~2" 
echo move "%originalName%" "%parentFolder:~0,5% %originalName%" 
exit /b 

あなたが探している特定のビットは、5つの文字の後に文字0で開始および停止%のparentFolderの%の部分文字列を取る%parentFolder:~0,5%、です。これはあなたが探している最初の5文字を​​提供します。

これは、forループ%%zタイプ変数では使用できないというのが難しいことです。したがって、別の変数に渡す必要があります。さらに、いくつかの入れ子にされたループがあるので、遅延拡張はこれを実際には醜いものにするので、変数を%1および%2型変数に変換して通常の変数(set "originalName=%~1")に渡すサブルーチン(call :renameStuff "%%i" "%%~nxz")これがうまくいくだろう。

+1

@ legg1979: 'echo'コマンドを実行するのではなく、' move'コマンドをスクリーンに表示するだけです(セキュリティ上の理由から)。 「エコー」という言葉。最初の行に '@echo off'を挿入してください。これはスクリプトに、実行する前にすべてのコマンドを画面に表示しないように指示します。 (これらは非常に基本的なものですが、あなたが完全なnoobであると主張すると、それは言及する価値があると思いました) – Stephan

+0

'for %% a'ループ(元のコードには既に存在しています)は全く無意味です。' %% a'は使われたことがない; (意味があれば、その '%%〜dpz%\。'は '%%〜dpz 'を読みます。');現在のディレクトリの親ディレクトリのすべての項目を列挙しますが、反復項目は使用されません。すべての反復で、内側の 'for/F'ループがファイルの名前を変更しようとするので、最後にファイルに複数の5文字の接頭辞が付いてくることがあります... – aschipfl

+0

@Wes Larsonありがとうございます。オリジナルにあった余分な部分。それはどういうわけか、上書きされたことを確認しています。私は今それをダブルバックアップしてtho! – Legg1979

関連する問題