2017-08-29 91 views
-2

我需要根據文件名將文件從一個目錄移動到另一個目錄,同時將文件放入子目錄中。將文件從一個目錄移動到另一個目錄並將它們放在基於文件名的文件夾中

背景:

文件名(建築Number)-assign-FLR-pln.dgn

新的位置將是F:/分配樓層平面圖/建築/(號樓)/平面圖文件。

下的批處理文件需要讀取.dgn名字爲建築物編號,然後將文件放在相應的樓層平面圖的子文件夾中的樓號文件

所以......

取(樓號)-assign-FLR-pln.dgn從一個目錄文件,並將其放置.....

分配樓層平面圖 - 建築 - (房號) - 地板計劃文件< - 這裏

+0

是否必須批量寫入?您的系統是否安裝了任何腳本語言,如python,php,或者您的系統是否安裝了Windows 10 bash shell?批處理是寫一些東西的一種可怕的方式,它的編寫/調試令人困惑,並且沒有多大意義。你機器上有C#編譯器嗎?幾乎任何解決方案都比基於批處理的解決方案更好。 – HumbleWebDev

+1

建築號碼是否總是在括號內?你打算給「(樓號)」命名目錄嗎?還包括括號?此外,您應該知道,在不顯示代碼的情況下詢問代碼問題不在此處,請[編輯](https://stackoverflow.com/posts/45942579/edit)您的帖子以包含您遇到問題的代碼與,解釋到底是什麼麻煩與它。 – Compo

+0

對不起,我是Stackoverflow的新手,我沒有我要求別人幫我的代碼。然而,對於你的問題,paren只是一個佔位符。邪惡的程序員 - 使用工作機器我們只使用CMD。所以文件名100-assig-flr-plan.dgn需要進入100文件夾的平面圖子文件夾。 –

回答

0

如果你想直接從批處理文件中完成一些複雜的工作,那麼你有一點點要學習。

研究名單:

FOR 
SET 
CALL 

你要使用FOR命令來獲取文件名;請注意0​​選項。例如:

set BAT_DGNFNM= 
for %%F in (*.dgn) do set BAT_DGNFNM=%%~nF 

這會導致將環境變量BAT_DGNFNM設置爲基本文件名。然而,它遍歷所有的文件,所以真的,你需要它來調用一個子程序爲每個文件:

for %%F in (*.dgn) do call :DODGN "%%~dpnxF" "%%~nF" 

這調用子程序:DODGN,並將它傳遞兩個引號封裝的參數;第一個是完全合格的文件名,第二個是基本文件名。

然後你做實際的文件中的子程序處理:

:DODGN 
set BAT_DGNFNM=%1 
set BAT_DGNBNM=%2 
REM Do stuff with BAT_DGNBNM using SET commands 
GOTO :EOF 

你需要確保你沒有「貫穿」主循環後的子程序完成,你應該當你完成後清理你的環境變量,所以這看起來像這樣:

@echo off 
for %%F in (*.dgn) do call :DODGN "%%~dpnxF" "%%~nF" 
goto ENDIT 

:DODGN 
set BAT_DGNFNM=%1 
set BAT_DGNBNM=%2 
REM Do stuff with BAT_DGNBNM using SET commands 
GOTO :EOF 

:ENDIT 
set BAT_DGNFNM= 
set BAT_DGNBNM= 

祝你好運 - 這東西可以變得複雜。

最後提醒:大多數你的學習曲線將與SET命令 - 這就是你如何提取出子一個環境變量,並把它變成另一種,執行文本替換等

這東西是這樣在VBS或PowerShell中更容易。

0

雖然您沒有顯示任何代碼,但我們可以幫助您......

這是很容易,如果你知道的命令來使用(對於初學者一個偉大的網站: SS64):

使用純for循環得到每個文件。
使用for /f循環提取建築物-NR(根據您的評論是用破折號分開的第一個標記)
使用md創建目標文件夾(如果已經存在的忽略錯誤)
使用copy複製文件。
完成。

@echo off 
REM prepare some files for testing: 
break>100-assign-flr-pln.dgn 
break>110-assign-flr-pln.dgn 
break>235-assign-flr-pln.dgn 

REM now copy them into their destination folders: 
set "dest=Assignment Floor Plans - Buildings - @ - Floor Plan Files" 
for %%f in (*-assign-flr-pln.dgn) do (
    for /f "tokens=1 delims=-" %%a in ("%%f") do (
    call md "%%dest:@=%%a%%" 2>nul 
    call copy "%%f" "%%dest:@=%%a%%\" 
) 
) 

REM now show the result: 
tree /f 

注:適應您的目的地(添加F:\

「特殊效果」:
call <command>:介紹解析的另一層,以避免delayed expansion
@=%%a字符串變量
2>nul抑制誤差範圍內更換消息

相關問題