1
我在尋找一些幫助來設置批處理腳本來遍歷整個目錄並複製所有.sql文件到一個文件夾。我可以用FOR
循環做到這一點,但如果兩個或更多不同目錄中的文件具有相同的名稱,我會遇到困難。我試圖用計數器來解決這個問題,但是我無法使它針對單個文件名。批處理文件將一棵樹中的所有.sql文件複製到一個文件夾中使用同名文件的計數器
我迄今爲止代碼:
set /A n=0
for /R %source% %%G in (*.sql) do (
if exist %destination%\sql_files\%%~nxG (
set /A n+=1
set "full=%%G"
set "name=%%~nG"
set "ext=%%~xG"
setlocal enabledelayedexpansion
copy "!full!" "!destination!\sql_files\!name!(!n!)!ext!" >nul
endlocal
) else (
copy "%%G" "%destination%\sql_files\" >nul
)
)
例如,如果我有:
%source%\dir1\file1.sql %source%\dir1\file2.sql %source%\dir2\file1.sql %source%\dir2\file2.sql %source%\dir3\file1.sql
我結束了:
file1.sql file1(1).sql file1(3).sql file2.sql file2(2).sql
我想看到的是:
file1.sql file1(1).sql file1(2).sql file2.sql file2(1).sql
我認爲我的答案可能在於一個子程序,但我不能完全弄清楚,使這項工作的邏輯。任何幫助是極大的讚賞。
[複製文件作爲另一名如果文件存在(的可能的複製http://stackoverflow.com/questions/13659369/copy-file-as -otherother-name-if-file-exist) – aschipfl
核心問題:你永遠不會重置計數器'n'。你的任務似乎對我來說不是微不足道的。我認爲你需要推遲返回的源文件,因爲計數器'n'鏈接到文件名,但不鏈接到包含子目錄。目標目錄最初保證爲空,或者那裏可能已有文件? – aschipfl
目標目錄將爲空。 –