2017-08-18 12 views
0

カンマ区切りの入力に基づいて一連のネストされたフォルダを作成する単純なバッチファイルを作成しようとしています。次のコードでは、GSDはすべてが存続するマスターフォルダです。そこから、ユーザはコンマで区切られた異なるブロックを入力する。これは、A、B、CまたはZ、G、Iなどとすることができます。バッチファイルのユーザー入力に基づくフォルダ作成のトラブルシューティング

この入力に基づいて、バッチファイルはブロック固有のフォルダを作成し、すべてを適切にネストする必要があります。ユーザーが1つのブロック(つまりA)のみを入力したときにコードが完全に機能するが、複数のブロック(つまりA、B、C)の入力を使用して実行しようとするとアクセスが拒否される。私のコーディングの知識は誰の目の前にもないので、どんな助力も大いに評価されます。

ブロックフォルダを他のフォルダ内に入れ子にしようとしています。その後、GSDの下にあるすべてのフォルダを入れ子にしようとしています。私はなるようにコードを変更したコメントに基づいて

@echo off 

rem Get User Input 
set /p gsd= Enter the GSD of the project: 
set /p blocks= Enter the blocks you are prepping a drive for separated by commas (i.e. A,B,C,etc.): 
set ItemCount=0 

mkdir %gsd% 

mkdir 01-Workspace_Setup 
mkdir 02-Tiles 
mkdir 03-Orthos 
mkdir 04-Saved_Workspaces 
mkdir 05-Backup 
mkdir 06-Raw 
mkdir 07-Excluded 

mkdir ECW 
mkdir FixPoints 
mkdir ImageFrames 
mkdir PCR 
mkdir ProjectInfo 
mkdir Seamlines 
mkdir TrackingGrid 
mkdir FixTo_Boundary 

:NextItem 
if "%blocks%" == "" pause & goto :EOF 

set /A ItemCount+=1 
for /F "tokens=1* delims=," %%a in ("%blocks%") do (
    mkdir Block_%%a 
    move /y Block_%%a .\02-Tiles 
    mkdir Block_%%a 
    move /y Block_%%a .\03-Orthos 
    mkdir Block_%%a 
    move /y Block_%%a .\06-Raw 
    mkdir Block_%%a 
    move /y Block_%%a .\07-Excluded 

    mkdir Block_%%a 
    move /y Block_%%a .\ECW 
    mkdir Block_%%a 
    move /y Block_%%a .\FixPoints 
    mkdir Block_%%a 
    move /y Block_%%a .\ImageFrames 
    mkdir Block_%%a 
    move /y Block_%%a .\PCR 
    mkdir Block_%%a 
    move /y Block_%%a .\ProjectInfo 
    mkdir Block_%%a 
    move /y Block_%%a .\Seamlines 
    mkdir Block_%%a 
    move /y Block_%%a .\TrackingGrid 
    mkdir Block_%%a 
    move /y Block_%%a .\FixTo_Boundary 

    set "blocks=%%b" 

    move /y ECW .\01-Workspace_Setup 
    move /y FixPoints .\01-Workspace_Setup 
    move /y ImageFrames .\01-Workspace_Setup 
    move /y PCR .\01-Workspace_Setup 
    move /y ProjectInfo .\01-Workspace_Setup 
    move /y Seamlines .\01-Workspace_Setup 
    move /y TrackingGrid .\01-Workspace_Setup 
    move /y FixTo_Boundary .\01-Workspace_Setup 

    move /y 01-Workspace_Setup .\%gsd% 
    move /y 02-Tiles .\%gsd% 
    move /y 03-Orthos .\%gsd% 
    move /y 04-Saved_Workspaces .\%gsd% 
    move /y 05-Backup .\%gsd% 
    move /y 06-Raw .\%gsd% 
    move /y 07-Excluded .\%gsd% 
) 
goto NextItem 



echo Folder creation complete. Have a pleasant day! 
pause 

:1つのブロックで実行すると

@echo off 

rem Get User Input 
set /p gsd= Enter the GSD of the project: 
set /p blocks= Enter the blocks you are prepping a drive for separated by commas (i.e. A,B,C,etc.): 

mkdir %gsd% 

mkdir 01-Workspace_Setup 
mkdir 02-Tiles 
mkdir 03-Orthos 
mkdir 04-Saved_Workspaces 
mkdir 05-Backup 
mkdir 06-Raw 
mkdir 07-Excluded 

mkdir ECW 
mkdir FixPoints 
mkdir ImageFrames 
mkdir PCR 
mkdir ProjectInfo 
mkdir Seamlines 
mkdir TrackingGrid 
mkdir FixTo_Boundary 

if %blocks% == "" pause & goto :EOF 

for %%a in (%blocks%) do (
    mkdir Block_%%a 
    move /y Block_%%a .\02-Tiles 
    mkdir Block_%%a 
    move /y Block_%%a .\03-Orthos 
    mkdir Block_%%a 
    move /y Block_%%a .\06-Raw 
    mkdir Block_%%a 
    move /y Block_%%a .\07-Excluded 

    mkdir Block_%%a 
    move /y Block_%%a .\ECW 
    mkdir Block_%%a 
    move /y Block_%%a .\FixPoints 
    mkdir Block_%%a 
    move /y Block_%%a .\ImageFrames 
    mkdir Block_%%a 
    move /y Block_%%a .\PCR 
    mkdir Block_%%a 
    move /y Block_%%a .\ProjectInfo 
    mkdir Block_%%a 
    move /y Block_%%a .\Seamlines 
    mkdir Block_%%a 
    move /y Block_%%a .\TrackingGrid 
    mkdir Block_%%a 
    move /y Block_%%a .\FixTo_Boundary 

) 

move /y ECW .\01-Workspace_Setup 
move /y FixPoints .\01-Workspace_Setup 
move /y ImageFrames .\01-Workspace_Setup 
move /y PCR .\01-Workspace_Setup 
move /y ProjectInfo .\01-Workspace_Setup 
move /y Seamlines .\01-Workspace_Setup 
move /y TrackingGrid .\01-Workspace_Setup 
move /y FixTo_Boundary .\01-Workspace_Setup 

move /y 01-Workspace_Setup .\%gsd% 
move /y 02-Tiles .\%gsd% 
move /y 03-Orthos .\%gsd% 
move /y 04-Saved_Workspaces .\%gsd% 
move /y 05-Backup .\%gsd% 
move /y 06-Raw .\%gsd% 
move /y 07-Excluded .\%gsd% 

echo Folder creation complete. Have a pleasant day! 
pause 

、すべてのものは、それが表示されます動作します。 Block_%%aフォルダはどこに配置されていても構いません。変数または複数の変数(A、B、C)を指定せずに実行すると、そのことは爆発し、機能しません。 Block_%%aフォルダ以外のすべてのフォルダが作成され、何も入れ子にされません。私はそれを作成しようとしたので、すでにネストされたフォルダを構築するだけですが、それを行うための正しい構文を理解できませんでした。

+0

IMO新しいフォルダを作成してから別のフォルダに移動することはできません。代わりに、フォルダに直接作成してください。拡張子がebabled(デフォルト)の場合、mdは中間のフォルダも作成します。これは 'md /? 'を参照してください。 '%gsd%'を最初にCD化せずに、新しいフォルダはすべて現在のフォルダに作成されます。 – LotPings

+0

変数%blocks%を処理するには、単純な 'for %% a in(%blocks%)do ...'を使ってください。 'for/f' – LotPings

答えて

0

私は間違っているかもしれませんが、インタプリタCMDへのアクセスは、上記のスクリプトを使ってファイルを作成し、行を読み、位置を記憶し、ファイル/フォルダを読み取り専用で読み取り、 Read-onlyからArchivesへのInterpreterの属性によって

0

引用符はリストを1つの項目として表示しています。前述のように

for /F "tokens=1* delims=," %%a in ("%blocks%") do (

for /F "tokens=1* delims=," %%a in (%blocks%) do (

する必要があり、あなたは/ Fループを必要としません。

for %%a in (%blocks%) do (
+0

@NickGagne - これはコードが機能していることを意味しますか? – lit

+0

'%% a in(%blocks%)do('関数が正常に動作するのに問題があります.Aを入力するだけで、何も入力しないと機能します。 – NMG

+0

複数のブロックを入力すると、すべてのトップレベルと2番目のレベルのフォルダが作成されますが、ブロックフォルダは作成されません。それは書かれている。彼らはすべてトップレベル – NMG

関連する問題