バッチファイルパスの奇妙さ


3

このバッチスクリプトを作成して、ローカルアプリのデータとリダイレクトされたユーザーフォルダーからいくつかのものを削除します。

このことは、ちょっとしたちょっとした引っ掛かりを除けば、まったくうまく機能します。

   set share=\\SERVER\d$\tsprofiles\%USERNAME%.V2\AppData\Roaming
   ECHO Deleting..... %share%
   net use Y: %share% 
   cd /D Y:\
   del * /F /S /Q
   del * /F /Q
   net use Y: /DELETE /YES

何らかの理由でvar shareが作成したパスがエクスプローラのUNCパスにナビゲートしていますが、これはDrive Y:にマッピングしようとしています:

net use Y: %share%

サイコロはありません。私はドメイン管理者アカウントと管理者コマンドプロンプトからこれを実行しているので、私はそれがパーミッション問題ではないと確信しています....


二重引用符がある場所
jiggunjer

変だね。それを指摘してくれてありがとう、残念ながらそれは私のコードで最初の "を持っていません。私は記事を更新します
TacticalKitchen

net use Y: "%share%"?いくつかのエラーメッセージ?追加する pause もしあれば。
JosefZ

@Homey_D_Clown_IT set share = \\ SERVER \ tsprofiles $ \%USERNAME%.V2 \ AppData \ Roamingは、現在のものです(残念ながら、隠された共有です)。 "システムは指定されたファイルを見つけることができません。JosefZもvarをマークに入れています。それでも喜びはありません。異なるUNCパスの両方に当てはまります...
TacticalKitchen

回答:


2

何らかの理由でvar shareが作成したパスがエクスプローラのUNCパスにナビゲートしていますが、これはDrive Y:にマッピングしようとしています:

「UNCパスに移動する」というのがどういう意味なのかわかりません。共有を作成するのではなく、そのディレクトリに変更するという意味ですか?

また、UNC共有をマッピングしてその内容を削除する必要がある理由もわかりません。以下のようにUNCパスを直接使用することはできませんか。

set share=\\SERVER\d$\tsprofiles\%USERNAME%.V2\AppData\Roaming
ECHO Deleting..... %share%
del "%share%\*" /F /S /Q
del "%share%\*" /F /Q

また、私はあなたの例がインデントされていることに気づきました。条件/ループブロックの断片は括弧で囲まれていますか?例えば IF EXIST "\\SERVER\d$" ( <your script lines here> )

スクリプトが括弧ブロック内にネストされている場合は、スクリプトに遅延展開を使用する必要があります。 share このようにパーセント記号ではなく感嘆符を使用して可変にします。

SETLOCAL ENABLEDELAYEDEXPANSION

IF EXIST "\\SERVER\d$" (
   set share=\\SERVER\d$\tsprofiles\%USERNAME%.V2\AppData\Roaming
   ECHO Deleting..... "!share!"
   net use Y: "!share!"
   cd /D Y:\
   del * /F /S /Q
   del * /F /Q
   net use Y: /DELETE /YES
)

ENDLOCAL

それ以外の場合、シェア変数は常に、設定した値ではなく、括弧ブロックが入力されたときと同じ値になります。

そして、コメントで既に述べたように、あなたは念のために分け前を引用する必要があります %USERNAME% スペースがあります。


0

これは結局私のようになって、地獄を複雑にしてしまいました。 @David Woodwardの提案に基づいて、私は少しデザインを変更しました。

また、UNC共有を削除してそのUNC共有を削除する必要がある理由もわかりません。   内容以下のようにUNCパスを直接使用することはできませんか。

set share=\\SERVER\d$\tsprofiles\%USERNAME%.V2\AppData\Roaming
ECHO Deleting..... %share%
del "%share%\*" /F /S /Q
del "%share%\*" /F /Q

それで、私がやめたのは、はるかに合理化されたスクリプトで、読みやすく、ずっと速くなりました。どうもありがとうございました!

SET dir=%~dp0
SET userfolder="\\SERVER\userfolders$\%USERNAME%\AppData\Roaming"
SET tsprofiles="\\SERVER\TSPROFILES$\%USERNAME%.V2\AppData\Roaming"
SET localdata="C:\Users\%USERNAME%\AppData\Local\Temp"
SET inetcache="C:\Users\%USERNAME%\AppData\Local\Microsoft\Windows\INetCache"
REM Start of script
@ECHO OFF
ECHO [(===============================================================)]
ECHO ^|^|                                                               ^|^|
ECHO ^|^|  Remove un-neccecary files from %USERNAME% on %COMPUTERNAME%  ^|^|
ECHO ^|^|                                                               ^|^|
ECHO [(===============================================================)]
ECHO Deleting.... %inetcache%
del "%inetcache%\*" /F /S /Q > null
del "%inetcache%\*" /F /Q > null
ECHO Deleting.... %localdata%
del "%localdata%\*" /F /S /Q > null
del "%localdata%\*" /F /Q > null
ECHO Deleting.... Using UNC path %USERFOLDER%
del "%userfolder%\*" /F /S /Q > null
del "%userfolder%\*" /F /Q > null
ECHO Deleting.... Using UNC path %tsprofiles%
del "%tsprofiles%\*" /F /S /Q > null
del "%tsprofiles%\*" /F /Q > null
ECHO Return to working DIR
cd /D %dir%

誰かが便利だと思ったら上記に投稿しました


なぜあなたはやる cd /D %dir%?あなたのスクリプトは決してしません CD どこにでも。
DavidPostill

これは主に、管理者として起動したショートカットから実行すると、バッチ内から次のログインスクリプトを参照するときに変なことが行われるためです。何らかの理由で、それはその時点でどのように感じているかによりますが、どちらか適切な場所に戻るか、不思議なことにSystem32に戻って自分自身を見つけます。
TacticalKitchen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.