2013-06-26 164 views
1

如何將批處理文件複製到子目錄,運行它,然後刪除批處理文件?for循環批處理文件

我工作的一個批處理文件,它會自動改變它是在文件夾中的文件夾圖標如下圖所示:

@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 
) 
+0

您的第一個腳本適用於我(Win7)。在它工作之前必須刪除什麼? – mojo

+0

@Jubjub Bandersnatch當我運行它時,它確實做了它應該做的事情,除非實際更改文件夾圖標(還包括Win7),它只會在文件夾內的文件被刪除時出現圖標。 –

+0

雖然這聽起來更像是一個Explorer而不是腳本的問題。 – mojo

回答

2

試試這個:

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

%cd%將不會列出。

+0

很好用!更改結束變量爲%%〜nd以獲取文件夾名稱,非常感謝。 –

0

嗯..有趣的場景。

試試看命令http://ss64.com/nt/forfiles.html。 但是使用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檢查。

這爲我工作,希望它有幫助。

您的Mona。

+0

謝謝,它看起來好像它會做的伎倆,雖然子目錄包含大約1,000-2,000個文件夾。我將不得不上升並測試它! –

+0

哇,你應該真的嘗試'forfiles',它有時候通過'for/r'命令很有用 – Monacraft

0

對於第二部分,我發現添加IF語句可以篩選出搜索的根。你的例子根本不適用於我,所以我不得不修改它一點。/R在循環變量中預先搜索當前目錄(不是%CD%),所以我必須去掉一些標記值。我認爲它不太可能找到名稱中帶有「ZZZZZ」的文件,但是您的文件系統可能需要不同的哨兵。

FOR /R "%CD%" %%d IN (ZZZZZ) do @(SET "D=%%~d" & SET "D=!D:\ZZZZZ=!" & IF NOT "!D!"=="%CD%" @ECHO !D!)