web-dev-qa-db-ja.com

Windowsのmkdir単一コマンドの複数パス

@echo off
set "var=string"
set "today=%date:~10,4%-%date:~7,2%-%date:~4,2%"
set "path_backup=\\SGSINWPDFS01v\SG\OTHERS\IT\OTHERS\WORKSTATIONS\SCHEDULE"
set "path_sourcepst01=AppData\Local\Microsoft\Outlook"
set "path_sourcepst02=Desktop"
set "path_sourcepst03=My Documents\PST"
set "path_sourcepst04=My Documents\Outlook"
set "path_sourcepst05=My Documents\Outlook Files"
mkdir "%path_backup%\%username%\%today%"
mkdir "%path_backup%\%username%\%today%\PST"
mkdir "%path_backup%\%username%\%today%\PST\%path_sourcepst01%"
mkdir "%path_backup%\%username%\%today%\PST\%path_sourcepst02%"
mkdir "%path_backup%\%username%\%today%\PST\%path_sourcepst03%"
mkdir "%path_backup%\%username%\%today%\PST\%path_sourcepst04%"
mkdir "%path_backup%\%username%\%today%\PST\%path_sourcepst05%"

上記のようにスクリプトを変更しました。それでも、システムはsourcepst01、03、04、および05にフォルダーを作成できません。sourcepst02は正常に機能しています。

パス全体をMKDIRできないようです。システムが混乱し、1つずつ実行する必要があります。ここで何かが足りませんか?

8
m.k.frenky

次の行を追加します。

setlocal enableextensions

バッチファイルの@echo off行の直後。これにより、mkdirが中間ディレクトリを作成できるようになります。

help mkdirからの出力の抜粋:

If Command Extensions are enabled MKDIR changes as follows:

MKDIR creates any intermediate directories in the path, if needed.
For example, assume \a does not exist then:

    mkdir \a\b\c\d

is the same as:

    mkdir \a
    chdir \a
    mkdir b
    chdir b
    mkdir c
    chdir c
    mkdir d

which is what you would have to type if extensions were disabled.
9
Michael Burr

パスを引用符で囲みます。

mkdir "%foo%\%bar%\%somename%"

問題は、名前にスペースが含まれていて、mkdirがそれらを単一の名前ではなく2つの引数として解釈していることです。引用符は、すべてを単一のパスとして解釈するように強制します。

7
John Deters

John Detersが問題を突き止めましたが、私は提案します

set "path_sourcepst4=My Documents\Outlook"
mkdir "%path_backup%\%username%\PST-%date:~10,4%-%date:~7,2%-%date:~4,2%\%path_sourcepst4%"

set "var=string"形式を使用すると、変数に設定された値に、行の末尾のスペースが含まれないようになります(ほとんど見えません)。あなたは一度だけそれによって捕らえられる必要があります...それはまた数を減らします " 解決されています。

そして、say yyyymmddという変数を%date:~10,4%-%date:~7,2%-%date:~4,2%に設定して、that文字列が繰り返されないようにしてみませんか?

2
Magoo
@echo off
set "var=string"
set "today=%date:~10,4%-%date:~7,2%-%date:~4,2%"
set "path_backup=\\SGSINWPDFS01v\SG\OTHERS\IT\OTHERS\WORKSTATIONS\SCHEDULE"
set "path_sourcepst01=AppData\Local\Microsoft\Outlook"
set "path_sourcepst02=Desktop"
set "path_sourcepst03=My Documents\PST"
set "path_sourcepst04=My Documents\Outlook"
set "path_sourcepst05=My Documents\Outlook Files"
subst b: "%path_backup%"
mkdir "%path_backup%\%username%\%today%"
mkdir "%path_backup%\%username%\%today%\PST"
mkdir "%path_backup%\%username%\%today%\PST\%path_sourcepst01%"
mkdir "%path_backup%\%username%\%today%\PST\%path_sourcepst02%"
mkdir "%path_backup%\%username%\%today%\PST\%path_sourcepst03%"
mkdir "%path_backup%\%username%\%today%\PST\%path_sourcepst04%"
mkdir "%path_backup%\%username%\%today%\PST\%path_sourcepst05%"
subst b: /D

問題が見つかりました。ネットワークドライブ上で複数レベルのサブフォルダーを作成できないようです。したがって、ローカルドライブにマップして問題を解決します。

1
m.k.frenky

この問題は、フォルダの深さのネストされたレベルが原因である可能性があります。

サポートされている最大数は8レベルのディレクトリであり、全長260文字がもう1つの制限であると思います。

0
foxidrive