1

バッチ ファイルをサブディレクトリにコピーして実行し、バッチ ファイルを削除するにはどうすればよいですか?

私は、それが入っているフォルダーのフォルダーアイコンを自動的に変更するバッチファイルに取り組んでいます。以下に示します:

@ECHO OFF

attrib +s "%CD%"
set ICODIR=%CD%\Icon\

for %%F in ("%ICODIR%"*.ico) do set ICO=%%~nxF

set ICOINI=Desktop.ini

IF EXIST Desktop.ini (
    attrib -s -h %ICOINI%
)

echo [.ShellClassInfo] > %ICOINI%
echo IconResource=%ICODIR:~2%%ICO%>>%ICOINI%
echo InfoTip=%ICO:~0,-4%>>%ICOINI%

attrib -a +s +h %ICOINI%

Pause

これは、ファイルがそのディレクトリ内で削除されるまでフォルダアイコンを作成しないことが多くの問題で判明した後、機能します。

すべてのサブディレクトリをリストし、それらの名前を保存する for ループで作業しようとしています。最初にルートディレクトリがリストされますが。ルートディレクトリをスキップするにはどうすればよいですか? 以下に示すコード:

@ECHO OFF

for /R /D "delims=\" %%d IN (%CD%) do echo %%~nd

Pause

編集:ファイルが最後のフォルダーにのみ作成されるのはなぜですか?

for /D /R "%cd%" %%d IN (*) do (

    set something=%%~nd 
    echo TEST>%something%\Desktop.txt
)
4

3 に答える 3

2

これを試して:

for /D /R "%cd%" %%d IN (*) do echo %%~d

%cd%リストされないでしょう。

于 2013-06-26T10:54:29.453 に答える
0

2 番目の部分では、IF ステートメントを追加すると、検索のルートを除外できることがわかりました。あなたの例は私にとってはまったくうまくいかなかったので、少し変更する必要がありました。/R 検索で現在のディレクトリ (%CD% ではない) をループ変数の先頭に追加するため、センチネル値を取り除く必要がありました。名前に「ZZZZZ」が含まれるファイルを見つけるのは十分に難しいと思いましたが、ファイルシステムには別のセンチネルが必要になる場合があります。

FOR /R "%CD%" %%d IN (ZZZZZ) do @(SET "D=%%~d" & SET "D=!D:\ZZZZZ=!" & IF NOT "!D!"=="%CD%" @ECHO !D!)
于 2013-06-26T10:52:38.760 に答える
0

うーん..興味深いシナリオです。

http://ss64.com/nt/forfiles.htmlforfilesでコマンドを調べてみてください。ただし、コマンドを使用すると、これが思いつく最善の解決策です。for

:loop
set /a count+=1

for /f "tokens=%count% delims=\" %%a in ("%CD%") do (echo %%a > 
output.txt)

if %count% == 8 exit
goto :loop

これは最良の答えではありませんが、機能することに注意してください。このインスタンスは、ドライブ文字から最大 7 つのディレクトリをチェックしますが、ifチェックをインクリメントします。

これは私のために働いた、それが役立つことを願っています。

モナ君。

于 2013-06-26T10:24:48.813 に答える