2016-10-13 59 views
-1

我正在嘗試創建一個備份文件夾,其中包含2016年所有月份的子文件夾以及每個月所有日子文件夾的子文件夾。我想用一個bat文件來做到這一點。 我能做的最好的就是這個。在bat文件中使用CMD命令創建多個文件夾

md "E:\cctv backup" 
cd "E:\cctv backup" 
md "E:\cctv backup\October 2016" 
md "E:\cctv backup\November 2016" 
cd "E:\cctv backup\October 2016" 
md "E:\cctv backup\October 2016\01 Oct 2016" 
md "E:\cctv backup\October 2016\02 Oct 2016" 
md "E:\cctv backup\October 2016\03 Oct 2016" 
md "E:\cctv backup\October 2016\04 Oct 2016" 
md "E:\cctv backup\October 2016\05 Oct 2016" 
md "E:\cctv backup\October 2016\06 Oct 2016" 
md "E:\cctv backup\October 2016\06 Oct 2016" 
md "E:\cctv backup\October 2016\08 Oct 2016" 
md "E:\cctv backup\October 2016\09 Oct 2016" 
md "E:\cctv backup\October 2016\10 Oct 2016" 
md "E:\cctv backup\October 2016\11 Oct 2016" 
md "E:\cctv backup\October 2016\12 Oct 2016" 
md "E:\cctv backup\October 2016\13 Oct 2016" 
md "E:\cctv backup\October 2016\14 Oct 2016" 
md "E:\cctv backup\October 2016\15 Oct 2016" 
md "E:\cctv backup\October 2016\16 Oct 2016" 
md "E:\cctv backup\October 2016\17 Oct 2016" 
md "E:\cctv backup\October 2016\18 Oct 2016" 
md "E:\cctv backup\October 2016\19 Oct 2016" 
md "E:\cctv backup\October 2016\20 Oct 2016" 
md "E:\cctv backup\October 2016\21 Oct 2016" 
md "E:\cctv backup\October 2016\22 Oct 2016" 
md "E:\cctv backup\October 2016\23 Oct 2016" 
md "E:\cctv backup\October 2016\24 Oct 2016" 
md "E:\cctv backup\October 2016\25 Oct 2016" 
md "E:\cctv backup\October 2016\26 Oct 2016" 
md "E:\cctv backup\October 2016\27 Oct 2016" 
md "E:\cctv backup\October 2016\28 Oct 2016" 
md "E:\cctv backup\October 2016\29 Oct 2016" 
md "E:\cctv backup\October 2016\30 Oct 2016" 
md "E:\cctv backup\October 2016\31 Oct 2016" 
cd "E:\cctv backup\November 2016" 
md "E:\cctv backup\November 2016\01 Nov 2016" 
md "E:\cctv backup\November 2016\02 Nov 2016" 
md "E:\cctv backup\November 2016\03 Nov 2016" 
md "E:\cctv backup\November 2016\04 Nov 2016" 
md "E:\cctv backup\November 2016\05 Nov 2016" 
md "E:\cctv backup\November 2016\06 Nov 2016" 
md "E:\cctv backup\November 2016\07 Nov 2016" 
md "E:\cctv backup\November 2016\08 Nov 2016" 
md "E:\cctv backup\November 2016\09 Nov 2016" 
md "E:\cctv backup\November 2016\10 Nov 2016" 
md "E:\cctv backup\November 2016\11 Nov 2016" 
md "E:\cctv backup\November 2016\12 Nov 2016" 
md "E:\cctv backup\November 2016\13 Nov 2016" 
md "E:\cctv backup\November 2016\14 Nov 2016" 
md "E:\cctv backup\November 2016\15 Nov 2016" 
md "E:\cctv backup\November 2016\16 Nov 2016" 
md "E:\cctv backup\November 2016\17 Nov 2016" 
md "E:\cctv backup\November 2016\18 Nov 2016" 
md "E:\cctv backup\November 2016\19 Nov 2016" 
md "E:\cctv backup\November 2016\20 Nov 2016" 
md "E:\cctv backup\November 2016\21 Nov 2016" 
md "E:\cctv backup\November 2016\22 Nov 2016" 
md "E:\cctv backup\November 2016\23 Nov 2016" 
md "E:\cctv backup\November 2016\24 Nov 2016" 
md "E:\cctv backup\November 2016\25 Nov 2016" 
md "E:\cctv backup\November 2016\26 Nov 2016" 
md "E:\cctv backup\November 2016\27 Nov 2016" 
md "E:\cctv backup\November 2016\28 Nov 2016" 
md "E:\cctv backup\November 2016\29 Nov 2016" 
md "E:\cctv backup\November 2016\30 Nov 2016" 
+2

如果你的代碼可以工作,但你只是想縮小它(你絕對可以),那麼你可能需要在[Code Review](http://codereview.stackexchange.com/)上提問。 – SomethingDark

+0

您不需要創建任何父目錄。命令'md one \ two \ three'將創建一個和兩個目錄(如果它們不存在)。另外,使用'for/l'命令(鍵入'for /?'尋求幫助)來遍歷一個月中的日子(但記得31和30)。 –

+0

嘿,非常感謝..對於命令是我實際上正在努力。如何遍歷月份的日期,同時將它們創建爲月份父文件夾中的子文件夾。 – Taonga

回答

1
@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET "targetdir=U:\destdir" 
FOR /L %%y IN (2015,1,2017) DO (
FOR %%m IN (January,February,March,April,May,June, 
      July,August,September,October,November,December) DO (
    SET "monabbr=%%m" 
    SET "monabbr=!monabbr:~0,3!" 
    SET /a maxday=131 
    IF "!monabbr!"=="Apr" SET /a maxday=130 
    IF "!monabbr!"=="Jun" SET /a maxday=130 
    IF "!monabbr!"=="Sep" SET /a maxday=130 
    IF "!monabbr!"=="Nov" SET /a maxday=130 
    IF "!monabbr!"=="Feb" (
    SET /a maxday=128 
    SET /a leap=%%y %% 4 
    IF !leap!==0 SET /a maxday=129 
    ) 
    FOR /L %%d IN (101,1,!maxday!) DO (
    SET "daynum=%%d" 
    SET "daynum=!daynum:~-2!" 
    ECHO(MD "%targetdir%\%%m %%y\!daynum! !monabbr! %%y" 

    ) 
) 
) 
GOTO :EOF 

你需要改變的targetdir設置,以滿足您的具體情況。

爲了測試目的,所需的MD命令僅僅是ECHO驗證命令是否正確後,將ECHO(MD更改爲MD以實際創建目錄。追加2>nul壓制錯誤信息(例如,當目錄已經存在。)

開始,一步,最終年是顯而易見的 - 在%%y

然後,對於%%m每個全MONTHNAME,選擇前3個字母到monabbr使用delayedexpansion和substringing,然後計算一個月中的最大天數,通常爲131,除非月份縮寫表示30,而2月 - 查看是閏年,還是選擇28或29.將100添加到此最大值,以便開始,結束,產生一個3位數的日期編號%%d,然後計算當天編號的最後2位數到daynum,並將這些元素一起在approp riate命令來創建所需的最低級子目錄,記住這也會創建所需的任何中間目錄。

+0

嘿所以我跑你的腳本,但它沒有給任何輸出。有什麼事情做錯了嗎?我改變了echo(md爲md,但仍然沒有任何結果) – Taonga

+0

嗯,它對我來說非常合適,你需要提供更多關於發生的事情的信息,代碼對佈局非常敏感,所以切割粘貼而不是嘗試retype是可取的 - 並且使用適當的編輯器行EDITPLUS,而不是WORD或任何WP應用程序。如果你在'%% x ...'後面直接插入'echo %% x''(其中'x'可能是'y','m'或'd') - 這可能會揭示一些相關的問題。 – Magoo